WIP #431
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
on: push | |
name: Switch | |
jobs: | |
build: | |
name: Build | |
runs-on: ubuntu-latest | |
outputs: | |
matrix: ${{ steps.set-deployment-matrix.outputs.matrix }} | |
matrixLength: ${{ steps.set-deployment-matrix.outputs.matrixLength }} | |
defaults: | |
run: | |
working-directory: components/app | |
env: | |
AHN_ENV: test | |
CI: true | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Setup Ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
working-directory: components/app | |
bundler-cache: true | |
- name: Run Specs | |
run: | | |
bundle exec rspec | |
- name: Run FreeSWITCH tests | |
run: | | |
../freeswitch/tests/tests.sh | |
- name: Upload coverage to Codecov | |
uses: codecov/codecov-action@v3 | |
- name: Set Deployment Matrix | |
id: set-deployment-matrix | |
run: | | |
branchName=$(echo '${{ github.ref }}' | sed 's,refs/heads/,,g') | |
matrixSource=$(cat << EOF | |
[ | |
{ | |
"identifier": "switch-staging", | |
"branch": "develop", | |
"image_tag": "staging", | |
"ecs_service": "switch-staging", | |
"ecs_cluster": "somleng-switch-staging" | |
}, | |
{ | |
"identifier": "switch", | |
"branch": "master", | |
"image_tag": "latest", | |
"ecs_service": "switch", | |
"ecs_cluster": "somleng-switch" | |
} | |
] | |
EOF | |
) | |
matrix=$(echo $matrixSource | jq --arg branchName "$branchName" 'map(. | select((.branch==$branchName)) )') | |
echo ::set-output name=matrix::{\"include\":$(echo $matrix)}\" | |
echo ::set-output name=matrixLength::$(echo $matrix | jq length) | |
deploy: | |
name: Deploy | |
runs-on: ubuntu-latest | |
needs: | |
- build | |
if: needs.build.outputs.matrixLength > 0 | |
env: | |
IMAGE_TAG: ${{ github.sha }} | |
ECR_PUBLIC_REGISTRY: public.ecr.aws | |
APP_ECR_REPOSITORY_URI: public.ecr.aws/somleng/somleng-switch | |
APP_GHCR_REPOSITORY_URI: ghcr.io/somleng/somleng-switch | |
NGINX_ECR_REPOSITORY_URI: public.ecr.aws/somleng/somleng-switch-nginx | |
NGINX_GHCR_REPOSITORY_URI: ghcr.io/somleng/somleng-switch-nginx | |
FREESWITCH_ECR_REPOSITORY_URI: public.ecr.aws/somleng/somleng-switch-freeswitch | |
FREESWITCH_GHCR_REPOSITORY_URI: ghcr.io/somleng/freeswitch | |
FREESWITCH_EVENT_LOGGER_ECR_REPOSITORY_URI: public.ecr.aws/somleng/somleng-switch-freeswitch-event-logger | |
FREESWITCH_EVENT_LOGGER_GHCR_REPOSITORY_URI: ghcr.io/somleng/freeswitch-event-logger | |
strategy: | |
matrix: ${{fromJson(needs.build.outputs.matrix)}} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Configure AWS credentials | |
id: aws-login | |
uses: aws-actions/configure-aws-credentials@v2 | |
with: | |
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }} | |
role-skip-session-tagging: true | |
role-duration-seconds: 3600 | |
aws-region: ap-southeast-1 | |
- name: Login to AWS Public ECR | |
uses: docker/login-action@v2 | |
with: | |
registry: ${{ env.ECR_PUBLIC_REGISTRY }} | |
env: | |
AWS_REGION: us-east-1 | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@v2 | |
with: | |
registry: ghcr.io | |
username: ${{ github.repository_owner }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Export Polly Voices | |
run: | | |
components/freeswitch/bin/export_aws_polly_voices components/freeswitch/conf/autoload_configs/polly_voices.xml | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v2 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v2 | |
- name: Build and push Nginx | |
uses: docker/build-push-action@v4 | |
with: | |
context: components/nginx | |
push: true | |
platforms: linux/amd64,linux/arm64 | |
cache-from: type=gha,scope=${{ matrix.identifier }}-nginx | |
cache-to: type=gha,mode=max,scope=${{ matrix.identifier }}-nginx | |
tags: | | |
${{ env.NGINX_ECR_REPOSITORY_URI }}:${{ matrix.image_tag }} | |
${{ env.NGINX_ECR_REPOSITORY_URI }}:${{ env.IMAGE_TAG }} | |
${{ env.NGINX_GHCR_REPOSITORY_URI }}:${{ matrix.image_tag }} | |
- name: Build and push FreeSWITCH | |
uses: docker/build-push-action@v4 | |
with: | |
context: components/freeswitch | |
build-args: | |
signalwire_token=${{ secrets.SIGNALWIRE_TOKEN }} | |
push: true | |
platforms: linux/amd64 | |
cache-from: type=gha,scope=${{ matrix.identifier }}-freeswitch | |
cache-to: type=gha,mode=max,scope=${{ matrix.identifier }}-freeswitch | |
tags: | | |
${{ env.FREESWITCH_ECR_REPOSITORY_URI }}:${{ matrix.image_tag }} | |
${{ env.FREESWITCH_ECR_REPOSITORY_URI }}:${{ env.IMAGE_TAG }} | |
${{ env.FREESWITCH_GHCR_REPOSITORY_URI }}:${{ matrix.image_tag }} | |
- name: Build and push FreeSWITCH Event Logger | |
uses: docker/build-push-action@v4 | |
with: | |
context: components/freeswitch_event_logger | |
push: true | |
platforms: linux/amd64 | |
cache-from: type=gha,scope=${{ matrix.identifier }}-freeswitch-event-logger | |
cache-to: type=gha,mode=max,scope=${{ matrix.identifier }}-freeswitch-event-logger | |
tags: | | |
${{ env.FREESWITCH_EVENT_LOGGER_ECR_REPOSITORY_URI }}:${{ matrix.image_tag }} | |
${{ env.FREESWITCH_EVENT_LOGGER_ECR_REPOSITORY_URI }}:${{ env.IMAGE_TAG }} | |
${{ env.FREESWITCH_EVENT_LOGGER_GHCR_REPOSITORY_URI }}:${{ matrix.image_tag }} | |
- name: Build and push App | |
uses: docker/build-push-action@v4 | |
with: | |
context: components/app | |
push: true | |
platforms: linux/amd64 | |
cache-from: type=gha,scope=${{ matrix.identifier }} | |
cache-to: type=gha,mode=max,scope=${{ matrix.identifier }} | |
tags: | | |
${{ env.APP_ECR_REPOSITORY_URI }}:${{ matrix.image_tag }} | |
${{ env.APP_ECR_REPOSITORY_URI }}:${{ env.IMAGE_TAG }} | |
${{ env.APP_GHCR_REPOSITORY_URI }}:${{ matrix.image_tag }} | |
- name: Get current task definition | |
run: | | |
aws ecs describe-task-definition --task-definition "${{ matrix.identifier }}" --query 'taskDefinition' > task-definition.json | |
- name: Prepare NGINX task definition | |
id: render-nginx-task-def | |
uses: aws-actions/amazon-ecs-render-task-definition@v1 | |
with: | |
task-definition: task-definition.json | |
container-name: nginx | |
image: ${{ env.NGINX_ECR_REPOSITORY_URI }}:${{ env.IMAGE_TAG }} | |
- name: Prepare FreeSWITCH task definition | |
id: render-freeswitch-task-def | |
uses: aws-actions/amazon-ecs-render-task-definition@v1 | |
with: | |
task-definition: ${{ steps.render-nginx-task-def.outputs.task-definition }} | |
container-name: freeswitch | |
image: ${{ env.FREESWITCH_ECR_REPOSITORY_URI }}:${{ env.IMAGE_TAG }} | |
- name: Prepare FreeSWITCH event logger task definition | |
id: render-freeswitch-event-logger-task-def | |
uses: aws-actions/amazon-ecs-render-task-definition@v1 | |
with: | |
task-definition: ${{ steps.render-freeswitch-task-def.outputs.task-definition }} | |
container-name: freeswitch-event-logger | |
image: ${{ env.FREESWITCH_EVENT_LOGGER_ECR_REPOSITORY_URI }}:${{ env.IMAGE_TAG }} | |
- name: Prepare App task definition | |
id: render-app-task-def | |
uses: aws-actions/amazon-ecs-render-task-definition@v1 | |
with: | |
task-definition: ${{ steps.render-freeswitch-event-logger-task-def.outputs.task-definition }} | |
container-name: app | |
image: ${{ env.APP_ECR_REPOSITORY_URI }}:${{ env.IMAGE_TAG }} | |
- name: Deploy App Server | |
uses: aws-actions/amazon-ecs-deploy-task-definition@v1 | |
with: | |
task-definition: ${{ steps.render-app-task-def.outputs.task-definition }} | |
service: ${{ matrix.ecs_service }} | |
cluster: ${{ matrix.ecs_cluster }} | |
wait-for-service-stability: true |