1- name : BuildEngine CI
1+ name : BuildEngine v2 Test and Deploy
22
33on :
44 push :
5- branches : [master, develop, github-builds]
6- pull_request :
75 workflow_dispatch :
86 inputs :
9- logLevel :
10- description : " Log Level"
11- required : true
12- default : " warning"
137 tags :
148 description : " Tags"
15- schedule :
16- - cron : " 0 0 * * 0" # weekly
179
1810env :
19- BUILD_TAG : " build-engine-api:${{ github.run_number }}"
20- BUILD_NUMBER : ${{ github.run_number }}
11+ BUILD_ENGINE_BUILD_TAG : " build-engine-api:${{ github.run_number }}"
12+ OTEL_BUILD_TAG : " build-engine-otel: ${{ github.run_number }}"
2113
2214jobs :
23- build :
15+ check :
16+ uses : " ./.github/workflows/setup.yml"
17+ secrets :
18+ AUTH0_SECRET : ${{ secrets.AUTH0_SECRET }}
19+ push-to-ghcr :
2420 runs-on : ubuntu-latest
25-
21+ needs : check
22+ outputs :
23+ DOCKER_TAG : ${{ steps.branch.outputs.DOCKER_TAG }}
24+ ECS_CLUSTER : ${{ steps.branch.outputs.ECS_CLUSTER }}
25+ BUILD_ENGINE_BUILD_TAG : ${{ env.BUILD_ENGINE_BUILD_TAG }}
26+ OTEL_BUILD_TAG : ${{ env.OTEL_BUILD_TAG }}
27+ if : ${{ success() && (github.ref == 'refs/heads/develop' || github.ref == 'refs/heads/master') }}
2628 steps :
27- - uses : actions/checkout@v3
28-
29- - name : Get environment info
30- run : |
31- echo Docker version
32- docker --version
33- echo
34- echo Env
35- env
36-
37- - name : Setup local.env
38- run : |
39- echo "COMPOSER_AUTH={\"github-oauth\":{\"github.com\":\""${{ secrets.GITHUB_TOKEN }}\""}}" > local.env
40-
41- - name : Install dependencies
42- run : |
43- echo "Installing ecs-deploy script..."
44- mkdir -p $HOME/.local/bin
45- curl -o $HOME/.local/bin/ecs-deploy https://raw.githubusercontent.com/silinternational/ecs-deploy/master/ecs-deploy
46- chmod +x $HOME/.local/bin/ecs-deploy
47-
48- - name : Tests
49- run : |
50- make test
29+ - name : Checkout
30+ uses : actions/checkout@v5
5131
52- - name : Build docker image
53- uses : docker/build-push-action@v4
32+ - name : Setup node
33+ uses : actions/setup-node@v5
5434 with :
55- push : false
56- tags : ${{ env.BUILD_TAG }}
57- context : .
58- load : true
35+ node-version : 24
5936
6037 - name : Determine branch tag
6138 id : branch
6239 run : |
6340 if [[ "${GITHUB_HEAD_REF}" != "" ]]; then BRANCH="${GITHUB_HEAD_REF}"; else BRANCH="${GITHUB_REF_NAME}"; fi
6441 case $BRANCH in develop) DOCKER_TAG="staging" ;; master) DOCKER_TAG="production" ;; *) DOCKER_TAG="${BRANCH//\//-}" ;; esac
6542 case $BRANCH in develop) ECS_CLUSTER="scriptoria-stg";; master) ECS_CLUSTER="scriptoria-prd" ;; *) ECS_CLUSTER="none" ;; esac
66- echo "DockerTag=${DOCKER_TAG}" >> $GITHUB_OUTPUT
67- echo "EcsCluster=${ECS_CLUSTER}" >> $GITHUB_OUTPUT
43+ echo "DOCKER_TAG=${DOCKER_TAG}" >> $GITHUB_OUTPUT
44+ echo "ECS_CLUSTER=${ECS_CLUSTER}" >> $GITHUB_OUTPUT
45+
46+ - name : Build Docker images
47+ run : |
48+ echo "Building Docker images..."
49+ docker build -t ${{ env.BUILD_ENGINE_BUILD_TAG}} .
50+ docker build -t ${{ env.OTEL_BUILD_TAG}} -f Dockerfile.otel .
51+ echo "Docker images built successfully."
6852
6953 - name : Login to GitHub Container Registry
7054 uses : docker/login-action@v2
@@ -75,110 +59,54 @@ jobs:
7559
7660 - name : Push to GHCR
7761 run : |
78- docker tag ${{ env.BUILD_TAG }} ghcr.io/sillsdev/appbuilder-buildengine-api:${{ steps.branch.outputs.DockerTag }}
79- docker push ghcr.io/sillsdev/appbuilder-buildengine-api:${{ steps.branch.outputs.DockerTag }}
80-
81- - name : Configure AWS credentials (SIL)
82- id : aws_sil
83- uses : aws-actions/configure-aws-credentials@v4
84- with :
85- aws-access-key-id : ${{ secrets.SIL__AWS_ACCESS_KEY_ID }}
86- aws-secret-access-key : ${{ secrets.SIL__AWS_SECRET_ACCESS_KEY }}
87- aws-region : ${{ secrets.SIL__AWS_DEFAULT_REGION }}
88-
89- - name : Login to AWS ECR (SIL)
90- id : ecr_sil
91- uses : aws-actions/amazon-ecr-login@v2
92- with :
93- registries : ${{ secrets.SIL__AWS_ECR_ACCOUNT }}
94-
95- - name : Push to AWS ECR (SIL)
96- run : |
97- docker tag ${{ env.BUILD_TAG }} "${{ steps.ecr_sil.outputs.registry }}/appbuilder-buildengine-api:${{ steps.branch.outputs.DockerTag }}"
98- docker tag ${{ env.BUILD_TAG }} "${{ steps.ecr_sil.outputs.registry }}/appbuilder-buildengine-api:${{ env.BUILD_NUMBER }}"
99- docker push "${{ steps.ecr_sil.outputs.registry }}/appbuilder-buildengine-api:${{ steps.branch.outputs.DockerTag }}"
100- docker push "${{ steps.ecr_sil.outputs.registry }}/appbuilder-buildengine-api:${{ env.BUILD_NUMBER }}"
101-
102- - name : Deploy to ECS (SIL)
103- if : ${{ steps.branch.outputs.EcsCluster != 'none' }}
104- run : |
105- echo "Deploying ${{ env.BUILD_NUMBER }} to ${{ steps.branch.outputs.EcsCluster }}"
106- # Deploy to ECS cluster with service name 'build-engine', setting all images to the latest tag
107- ecs-deploy -c ${{ steps.branch.outputs.EcsCluster }} -n buildengine -i ignore -to ${{ env.BUILD_NUMBER }} --max-definitions 20 --timeout 600
108- echo "Deployment initiated successfully."
109-
110- - name : Configure AWS credentials (FCBH)
111- if : false # Temporarily disabled - remove this line to re-enable
112- # if: ${{ steps.branch.outputs.EcsCluster == 'scriptoria-prd' }} # Restore this when re-enabling
113- id : aws_fcbh
114- uses : aws-actions/configure-aws-credentials@v4
115- with :
116- aws-access-key-id : ${{ secrets.FCBH__AWS_ACCESS_KEY_ID }}
117- aws-secret-access-key : ${{ secrets.FCBH__AWS_SECRET_ACCESS_KEY }}
118- aws-region : ${{ secrets.FCBH__AWS_DEFAULT_REGION }}
119-
120- - name : Login to AWS ECR (FCBH)
121- if : false # Temporarily disabled - remove this line to re-enable
122- # if: ${{ steps.branch.outputs.EcsCluster == 'scriptoria-prd' }} # Restore this when re-enabling
123- id : ecr_fcbh
124- uses : aws-actions/amazon-ecr-login@v2
125- with :
126- registries : ${{ secrets.FCBH__AWS_ECR_ACCOUNT }}
127-
128- - name : Push to AWS ECR (FCBH)
129- if : false # Temporarily disabled - remove this line to re-enable
130- # if: ${{ steps.branch.outputs.EcsCluster == 'scriptoria-prd' }} # Restore this when re-enabling
131- run : |
132- docker tag ${{ env.BUILD_TAG }} "${{ steps.ecr_fcbh.outputs.registry }}/appbuilder-buildengine-api:${{ steps.branch.outputs.DockerTag }}"
133- docker tag ${{ env.BUILD_TAG }} "${{ steps.ecr_fcbh.outputs.registry }}/appbuilder-buildengine-api:${{ env.BUILD_NUMBER }}"
134- docker push "${{ steps.ecr_fcbh.outputs.registry }}/appbuilder-buildengine-api:${{ steps.branch.outputs.DockerTag }}"
135- docker push "${{ steps.ecr_fcbh.outputs.registry }}/appbuilder-buildengine-api:${{ env.BUILD_NUMBER }}"
136-
137- - name : Deploy to ECS (FCBH)
138- if : false # Temporarily disabled - remove this line to re-enable
139- # if: ${{ steps.branch.outputs.EcsCluster == 'scriptoria-prd' }} # Restore this when re-enabling
140- run : |
141- echo "Deploying ${{ env.BUILD_NUMBER }} to ${{ steps.branch.outputs.EcsCluster }}"
142- # Deploy to ECS cluster with service name 'build-engine', setting all images to the latest tag
143- ecs-deploy -c ${{ steps.branch.outputs.EcsCluster }} -n buildengine -i ignore -to ${{ env.BUILD_NUMBER }} --max-definitions 20 --timeout 600
144- echo "Deployment initiated successfully."
145-
146- - name : Configure AWS credentials (LU)
147- if : ${{ steps.branch.outputs.EcsCluster == 'scriptoria-stg' }}
148- id : aws_lu
149- uses : aws-actions/configure-aws-credentials@v4
150- with :
151- aws-access-key-id : ${{ secrets.LU__AWS_ACCESS_KEY_ID }}
152- aws-secret-access-key : ${{ secrets.LU__AWS_SECRET_ACCESS_KEY }}
153- aws-region : ${{ secrets.LU__AWS_DEFAULT_REGION }}
154-
155- - name : Login to AWS ECR (LU)
156- if : ${{ steps.branch.outputs.EcsCluster == 'scriptoria-stg' }}
157- id : ecr_lu
158- uses : aws-actions/amazon-ecr-login@v2
159- with :
160- registries : ${{ secrets.LU__AWS_ECR_ACCOUNT }}
161-
162- - name : Push to AWS ECR (LU)
163- if : ${{ steps.branch.outputs.EcsCluster == 'scriptoria-stg' }}
164- run : |
165- docker tag ${{ env.BUILD_TAG }} "${{ steps.ecr_lu.outputs.registry }}/appbuilder-buildengine-api:${{ steps.branch.outputs.DockerTag }}"
166- docker tag ${{ env.BUILD_TAG }} "${{ steps.ecr_lu.outputs.registry }}/appbuilder-buildengine-api:${{ env.BUILD_NUMBER }}"
167- docker push "${{ steps.ecr_lu.outputs.registry }}/appbuilder-buildengine-api:${{ steps.branch.outputs.DockerTag }}"
168- docker push "${{ steps.ecr_lu.outputs.registry }}/appbuilder-buildengine-api:${{ env.BUILD_NUMBER }}"
169-
170- - name : Deploy to ECS (LU)
171- if : ${{ steps.branch.outputs.EcsCluster == 'scriptoria-stg' }}
172- run : |
173- echo "Deploying ${{ env.BUILD_NUMBER }} to ${{ steps.branch.outputs.EcsCluster }}"
174- # Deploy to ECS cluster with service name 'build-engine', setting all images to the latest tag
175- ecs-deploy -c ${{ steps.branch.outputs.EcsCluster }} -n buildengine -i ignore -to ${{ env.BUILD_NUMBER }} --max-definitions 20 --timeout 600
176- echo "Deployment initiated successfully."
177-
178- - name : Clean up older packages
179- uses : actions/delete-package-versions@v4
180- with :
181- package-name : " appbuilder-buildengine-api"
182- package-type : " container"
183- min-versions-to-keep : 6
184- delete-only-untagged-versions : " true"
62+ docker tag ${{ env.BUILD_ENGINE_BUILD_TAG }} ghcr.io/sillsdev/appbuilder-buildengine-api:${{ steps.branch.outputs.DOCKER_TAG }}
63+ docker push ghcr.io/sillsdev/appbuilder-buildengine-api:${{ steps.branch.outputs.DOCKER_TAG }}
64+
65+ docker tag ${{ env.OTEL_BUILD_TAG }} ghcr.io/sillsdev/appbuilder-buildengine-otel:${{ steps.branch.outputs.DOCKER_TAG }}
66+ docker push ghcr.io/sillsdev/appbuilder-buildengine-otel:${{ steps.branch.outputs.DOCKER_TAG }}
67+
68+ deploy-sil :
69+ needs : push-to-ghcr
70+ uses : " ./.github/workflows/deploy.yml"
71+ with :
72+ BUILD_NUMBER : ${{ github.run_number }}
73+ ECS_CLUSTER : ${{ needs.push-to-ghcr.outputs.ECS_CLUSTER }}
74+ DOCKER_TAG : ${{ needs.push-to-ghcr.outputs.DOCKER_TAG }}
75+ BUILD_ENGINE_BUILD_TAG : ${{ needs.push-to-ghcr.outputs.BUILD_ENGINE_BUILD_TAG }}
76+ OTEL_BUILD_TAG : ${{ needs.push-to-ghcr.outputs.OTEL_BUILD_TAG }}
77+ secrets :
78+ AWS_ACCESS_KEY_ID : ${{ secrets.SIL__AWS_ACCESS_KEY_ID }}
79+ AWS_SECRET_ACCESS_KEY : ${{ secrets.SIL__AWS_SECRET_ACCESS_KEY }}
80+ AWS_DEFAULT_REGION : ${{ secrets.SIL__AWS_DEFAULT_REGION }}
81+ AWS_ECR_ACCOUNT : ${{ secrets.SIL__AWS_ECR_ACCOUNT }}
82+ deploy-fcbh :
83+ needs : push-to-ghcr
84+ if : false # Temporarily disabled - remove this line to re-enable
85+ # if: ${{ needs.push-to-ghcr.outputs.ECS_CLUSTER == 'scriptoria-prd' }} # Restore this when re-enabling
86+ uses : " ./.github/workflows/deploy.yml"
87+ with :
88+ BUILD_NUMBER : ${{ github.run_number }}
89+ ECS_CLUSTER : ${{ needs.push-to-ghcr.outputs.ECS_CLUSTER }}
90+ DOCKER_TAG : ${{ needs.push-to-ghcr.outputs.DOCKER_TAG }}
91+ BUILD_ENGINE_BUILD_TAG : ${{ needs.push-to-ghcr.outputs.BUILD_ENGINE_BUILD_TAG }}
92+ OTEL_BUILD_TAG : ${{ needs.push-to-ghcr.outputs.OTEL_BUILD_TAG }}
93+ secrets :
94+ AWS_ACCESS_KEY_ID : ${{ secrets.FCBH__AWS_ACCESS_KEY_ID }}
95+ AWS_SECRET_ACCESS_KEY : ${{ secrets.FCBH__AWS_SECRET_ACCESS_KEY }}
96+ AWS_DEFAULT_REGION : ${{ secrets.FCBH__AWS_DEFAULT_REGION }}
97+ AWS_ECR_ACCOUNT : ${{ secrets.FCBH__AWS_ECR_ACCOUNT }}
98+ deploy-lu :
99+ needs : push-to-ghcr
100+ if : ${{ needs.push-to-ghcr.outputs.ECS_CLUSTER == 'scriptoria-stg' }}
101+ uses : " ./.github/workflows/deploy.yml"
102+ with :
103+ BUILD_NUMBER : ${{ github.run_number }}
104+ ECS_CLUSTER : ${{ needs.push-to-ghcr.outputs.ECS_CLUSTER }}
105+ DOCKER_TAG : ${{ needs.push-to-ghcr.outputs.DOCKER_TAG }}
106+ BUILD_ENGINE_BUILD_TAG : ${{ needs.push-to-ghcr.outputs.BUILD_ENGINE_BUILD_TAG }}
107+ OTEL_BUILD_TAG : ${{ needs.push-to-ghcr.outputs.OTEL_BUILD_TAG }}
108+ secrets :
109+ AWS_ACCESS_KEY_ID : ${{ secrets.LU__AWS_ACCESS_KEY_ID }}
110+ AWS_SECRET_ACCESS_KEY : ${{ secrets.LU__AWS_SECRET_ACCESS_KEY }}
111+ AWS_DEFAULT_REGION : ${{ secrets.LU__AWS_DEFAULT_REGION }}
112+ AWS_ECR_ACCOUNT : ${{ secrets.LU__AWS_ECR_ACCOUNT }}
0 commit comments