|
1 | 1 | name: Deploy to development environment |
2 | 2 |
|
3 | | -# Controls when the action will run. |
4 | 3 | on: |
5 | | - # Triggers the workflow on push events only for the main branch |
6 | | - # push: |
7 | | - # branches: |
8 | | - # - main |
| 4 | + push: |
| 5 | + branches: |
| 6 | + - main |
9 | 7 |
|
10 | 8 | # Allows you to run this workflow manually from the Actions tab |
11 | 9 | workflow_dispatch: |
12 | 10 |
|
13 | | -env: |
14 | | - NODE_OPTIONS: '--max_old_space_size=8192' # Allows to increase Node's max heap size |
| 11 | +permissions: |
| 12 | + id-token: write # This is required for requesting the JWT for OIDC |
15 | 13 |
|
16 | 14 | jobs: |
17 | | - # Build image and push to ECR |
18 | 15 | build: |
19 | 16 | name: Build & Push Image |
20 | 17 | runs-on: ubuntu-latest |
21 | | - # Define job output that is available to all downstream jobs that depend on this job |
22 | | - outputs: |
23 | | - image_url: ${{ steps.image-url.outputs.image_url }} |
24 | 18 | environment: development |
25 | 19 |
|
26 | 20 | steps: |
27 | | - # Check-out repository under $GITHUB_WORKSPACE, so the job can access it |
28 | | - - name: Check out code |
| 21 | + - name: Checkout code |
29 | 22 | uses: actions/checkout@v4 |
30 | 23 |
|
31 | | - # Configure AWS credential and region environment variables for use in next steps |
32 | | - - name: Configure AWS Credentials |
33 | | - id: configure-aws |
34 | | - uses: aws-actions/configure-aws-credentials@v4 |
| 24 | + - name: Build images |
| 25 | + uses: ./.github/actions/build-images |
35 | 26 | with: |
36 | | - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_DEV }} # todo: add in envs |
37 | | - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_DEV }} # todo: add in envs |
| 27 | + tag: nightly |
| 28 | + aws-ecr-uri: ${{ vars.PRIVATE_ECR }} |
| 29 | + aws-role-arn: ${{ vars.AWS_ROLE_ARN }} |
38 | 30 | aws-region: ${{ vars.AWS_REGION }} |
39 | | - |
40 | | - # Log in the local Docker client |
41 | | - - name: Login to Amazon ECR |
42 | | - id: login-ecr-build |
43 | | - uses: aws-actions/amazon-ecr-login@v2 |
44 | | - |
45 | | - # Set output variable tag with the current checked out ref |
46 | | - - name: Set Image Url |
47 | | - id: image-url |
48 | | - env: |
49 | | - TARGET_IMAGE_URL: ${{ steps.login-ecr-build.outputs.registry }}/${{ vars.ECR_REPOSITORY }}:${{ github.ref_name || github.ref || github.sha }} |
50 | | - run: echo "image_url=${TARGET_IMAGE_URL}" >> $GITHUB_OUTPUT |
51 | | - |
52 | | - # Build and tag the docker image |
53 | | - - name: Build, tag and push image to AWS ECR |
54 | | - id: build-image |
55 | | - env: |
56 | | - TARGET_IMAGE_URL: ${{ steps.image-url.outputs.image_url }} |
57 | | - run: | |
58 | | - docker build -t $TARGET_IMAGE_URL -f docker/Dockerfile --build-arg APP_VERSION=${{ github.sha }} . |
59 | | - docker push $TARGET_IMAGE_URL |
60 | | -
|
61 | | - # Deploy to dev environment |
62 | | - deploy: |
63 | | - needs: build |
64 | | - name: Deploy |
65 | | - runs-on: ubuntu-latest |
66 | | - environment: development |
67 | | - |
68 | | - steps: |
69 | | - - name: Check out code |
70 | | - uses: actions/checkout@v4 |
71 | | - |
72 | | - # Configure AWS credential and region environment variables for use in next steps |
73 | | - - name: Configure AWS credentials |
74 | | - uses: aws-actions/configure-aws-credentials@v4 |
75 | | - with: |
76 | | - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID_DEV }} # todo: add in envs |
77 | | - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_DEV }} # todo: add in envs |
78 | | - aws-region: ${{ vars.AWS_REGION }} |
79 | | - |
80 | | - # Log in the local Docker client |
81 | | - - name: Login to Amazon ECR |
82 | | - id: login-ecr-deploy |
83 | | - uses: aws-actions/amazon-ecr-login@v2 |
84 | | - |
85 | | - # Insert a container image URI into template Amazon ECS task definition JSON file, creating a new task definition file. |
86 | | - - name: Fill in the new image ID in the Amazon ECS task definition |
87 | | - id: task-def-1 |
88 | | - uses: aws-actions/amazon-ecs-render-task-definition@v1 |
89 | | - with: |
90 | | - task-definition: ${{ vars.ECS_TASK_DEFINITION }} |
91 | | - container-name: ${{ vars.CONTAINER_NAME_GRAASP }} |
92 | | - image: ${{ needs.build.outputs.image_url }} |
93 | | - environment-variables: | |
94 | | - DB_CONNECTION_POOL_SIZE=${{ vars.DB_CONNECTION_POOL_SIZE }} |
95 | | - APPS_JWT_SECRET=${{ secrets.APPS_JWT_SECRET }} |
96 | | - APPS_PUBLISHER_ID=${{ secrets.APPS_PUBLISHER_ID }} |
97 | | - AUTH_TOKEN_EXPIRATION_IN_MINUTES=${{ secrets.AUTH_TOKEN_EXPIRATION_IN_MINUTES }} |
98 | | - AUTH_TOKEN_JWT_SECRET=${{ secrets.AUTH_TOKEN_JWT_SECRET }} |
99 | | - CLIENT_HOST=${{ vars.CLIENT_HOST }} |
100 | | - COOKIE_DOMAIN=${{ vars.COOKIE_DOMAIN }} |
101 | | - CORS_ORIGIN_REGEX=${{ secrets.CORS_ORIGIN_REGEX }} |
102 | | - DB_CONNECTION=postgres://${{ secrets.DB_USERNAME }}:${{ secrets.DB_PASSWORD }}@${{ secrets.DB_HOST }}:5432/${{ secrets.DB_NAME }} |
103 | | -
|
104 | | - DB_READ_REPLICA_CONNECTIONS=${{ secrets.DB_READ_REPLICA_CONNECTIONS }} |
105 | | - SENTRY_ENV=${{ vars.SENTRY_ENV }} |
106 | | - EMBEDDED_LINK_ITEM_IFRAMELY_HREF_ORIGIN=${{ vars.EMBEDDED_LINK_ITEM_IFRAMELY_HREF_ORIGIN }} |
107 | | - ETHERPAD_API_KEY=${{ secrets.ETHERPAD_API_KEY }} |
108 | | - ETHERPAD_COOKIE_DOMAIN=${{ vars.ETHERPAD_COOKIE_DOMAIN }} |
109 | | - ETHERPAD_URL=${{ vars.ETHERPAD_URL }} |
110 | | - FILE_STORAGE_ROOT_PATH=${{ secrets.FILE_STORAGE_ROOT_PATH }} |
111 | | - H5P_CONTENT_ACCESS_KEY_ID=${{ secrets.H5P_CONTENT_ACCESS_KEY_ID }} |
112 | | - H5P_CONTENT_BUCKET=${{ vars.H5P_CONTENT_BUCKET }} |
113 | | - H5P_CONTENT_REGION=${{ vars.H5P_CONTENT_REGION }} |
114 | | - H5P_CONTENT_SECRET_ACCESS_KEY_ID=${{ secrets.H5P_CONTENT_SECRET_ACCESS_KEY }} |
115 | | - H5P_FILE_STORAGE_TYPE=${{ vars.H5P_FILE_STORAGE_TYPE }} |
116 | | - H5P_PATH_PREFIX=${{ vars.H5P_PATH_PREFIX }} |
117 | | - HOSTNAME=${{ vars.HOSTNAME }} |
118 | | - IMAGE_CLASSIFIER_API=${{ vars.IMAGE_CLASSIFIER_API }} |
119 | | - JOB_SCHEDULING=${{ vars.JOB_SCHEDULING || false }} |
120 | | - JWT_SECRET=${{ secrets.JWT_SECRET }} |
121 | | - PASSWORD_RESET_JWT_SECRET=${{ secrets.PASSWORD_RESET_JWT_SECRET }} |
122 | | - EMAIL_CHANGE_JWT_SECRET=${{ secrets.EMAIL_CHANGE_JWT_SECRET }} |
123 | | - LIBRARY_CLIENT_HOST=${{ vars.LIBRARY_CLIENT_HOST }} |
124 | | - LOG_LEVEL=${{ vars.LOG_LEVEL }} |
125 | | - MAILER_CONFIG_FROM_EMAIL=${{ secrets.MAILER_CONFIG_FROM_EMAIL }} |
126 | | - MAILER_CONFIG_PASSWORD=${{ secrets.MAILER_CONFIG_PASSWORD_DEV }} |
127 | | - MAILER_CONFIG_SMTP_HOST=${{ secrets.MAILER_CONFIG_SMTP_HOST }} |
128 | | - MAILER_CONFIG_USERNAME=${{ secrets.MAILER_CONFIG_USERNAME }} |
129 | | - MEILISEARCH_MASTER_KEY=${{ secrets.MEILISEARCH_MASTER_KEY }} |
130 | | - MEILISEARCH_REBUILD_SECRET=${{ secrets.MEILISEARCH_REBUILD_SECRET }} |
131 | | - MEILISEARCH_URL=${{ secrets.MEILISEARCH_URL }} |
132 | | - NODE_ENV=${{ vars.NODE_ENV }} |
133 | | - PORT=${{ vars.PORT }} |
134 | | - PUBLIC_URL=${{ secrets.PUBLIC_URL }} |
135 | | - RECAPTCHA_SECRET_ACCESS_KEY=${{ secrets.RECAPTCHA_SECRET_ACCESS_KEY }} |
136 | | - REDIS_HOST=${{ secrets.REDIS_HOST }} |
137 | | - REDIS_PASSWORD=${{ secrets.REDIS_PASSWORD }} |
138 | | - REDIS_PORT=${{ secrets.REDIS_PORT }} |
139 | | - REDIS_USERNAME=${{ secrets.REDIS_USERNAME }} |
140 | | - REFRESH_TOKEN_EXPIRATION_IN_MINUTES=${{ vars.REFRESH_TOKEN_EXPIRATION_IN_MINUTES }} |
141 | | - REFRESH_TOKEN_JWT_SECRET=${{ secrets.REFRESH_TOKEN_JWT_SECRET }} |
142 | | - S3_FILE_ITEM_ACCESS_KEY_ID=${{ secrets.S3_FILE_ITEM_ACCESS_KEY_ID }} |
143 | | - S3_FILE_ITEM_BUCKET=${{ vars.S3_FILE_ITEM_BUCKET }} |
144 | | - S3_FILE_ITEM_PLUGIN=${{ vars.S3_FILE_ITEM_PLUGIN }} |
145 | | - S3_FILE_ITEM_REGION=${{ vars.S3_FILE_ITEM_REGION }} |
146 | | - S3_FILE_ITEM_SECRET_ACCESS_KEY=${{ secrets.S3_FILE_ITEM_SECRET_ACCESS_KEY }} |
147 | | - SECURE_SESSION_SECRET_KEY=${{ secrets.SECURE_SESSION_SECRET_KEY }} |
148 | | - SENTRY_DSN=${{ secrets.SENTRY_DSN }} |
149 | | - WEBSOCKETS_PLUGIN=${{ vars.WEBSOCKETS_PLUGIN }} |
150 | | - OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }} |
151 | | - OPENAI_ORG_ID=${{ secrets.OPENAI_ORG_ID }} |
152 | | - GEOLOCATION_API_HOST=${{ vars.GEOLOCATION_API_HOST }} |
153 | | - GEOLOCATION_API_KEY=${{ secrets.GEOLOCATION_API_KEY }} |
154 | | -
|
155 | | - # Use latest revision of the task-definition to deploy the application to ECS |
156 | | - - name: Deploy Amazon ECS task definition |
157 | | - uses: aws-actions/amazon-ecs-deploy-task-definition@v2 |
158 | | - with: |
159 | | - task-definition: ${{ steps.task-def-1.outputs.task-definition }} |
160 | | - service: ${{ vars.ECS_SERVICE_GRAASP }} |
161 | | - cluster: ${{ vars.ECS_CLUSTER_GRAASP }} |
162 | | - wait-for-service-stability: true |
0 commit comments