Skip to content

compose

compose #1022

Workflow file for this run

name: CI/CD
on:
- push
jobs:
test-backend:
name: Test backend
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/setup-node-using-nvm
- name: Install dependencies
run: yarn
- name: Build
run: npm run build
- name: Run tests with coverage report
run: yarn --cwd=packages/backend run test:coverage --forceExit
- name: List coverage directory
run: ls -la ./packages/backend
# TODO: Add later (does not work atm)
# - name: Coveralls
# uses: coverallsapp/github-action@master
# with:
# github-token: ${{ secrets.GITHUB_TOKEN }}
# path-to-lcov: ./packages/backend/coverage/lcov.info
# test-frontend:
# name: Test frontend
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v1
# - uses: actions/setup-node@v1
# with:
# node-version: '12.x'
# - name: Install dependencies
# run: yarn --cwd=frontend install
# - name: Run tests
# run: yarn --cwd=frontend test
# Test that building local dev env using docker works
test-build:
name: Build for dev env
runs-on: ubuntu-latest
steps:
- run: echo "Ref ${{ github.ref }}"
- name: Checkout code
uses: actions/checkout@v4
- name: Build docker image
run: |
docker build -t diamonds2_base:latest -f .docker/dockerfiles/base .
docker compose -f docker-compose.yml build
# Build and push production images
build-prod:
name: Build for prod env
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
needs:
- test-backend
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Login to GitHub registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build docker image
run: |
docker build -t diamonds2_base:latest -f .docker/dockerfiles/base .
docker compose -f docker-compose.prod-build.yml build
- name: Extract branch name
shell: bash
run: |
echo "BRANCH_NAME=$(echo ${GITHUB_REF#refs/heads/} | sed 's/\//_/g')" >> $GITHUB_ENV
echo "${BRANCH_NAME}"
- name: Tag docker images
run: |
docker tag diamonds2-frontend ghcr.io/etimo/diamonds2/frontend:latest-${BRANCH_NAME}
docker tag diamonds2-frontend ghcr.io/etimo/diamonds2/frontend:${BRANCH_NAME}-${{ github.sha }}
docker tag diamonds2-backend ghcr.io/etimo/diamonds2/backend:latest-${BRANCH_NAME}
docker tag diamonds2-backend ghcr.io/etimo/diamonds2/backend:${BRANCH_NAME}-${{ github.sha }}
- name: Push docker images
run: |
docker push ghcr.io/etimo/diamonds2/frontend:latest-${BRANCH_NAME}
docker push ghcr.io/etimo/diamonds2/frontend:${BRANCH_NAME}-${{ github.sha }}
docker push ghcr.io/etimo/diamonds2/backend:latest-${BRANCH_NAME}
docker push ghcr.io/etimo/diamonds2/backend:${BRANCH_NAME}-${{ github.sha }}
deploy-prod:
name: Deploy to production
needs: build-prod
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- uses: chrnorm/deployment-action@releases/v1
name: Create GitHub deployment
id: deployment
with:
token: "${{ github.token }}"
target_url: https://diamonds.etimo.se
environment: prod
initial_status: "in_progress"
- name: Update apps
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.DEPLOY_ETIMO_AWS_HOST }}
USERNAME: ${{ secrets.DEPLOY_ETIMO_AWS_USERNAME }}
PORT: 22
KEY: ${{ secrets.DEPLOY_ETIMO_AWS_KEY }}
script: |
cd diamonds2
git fetch
git checkout --progress --force ${{ github.sha }}
docker-compose down --remove-orphans
docker system prune -af
source ~/.bash_profile
echo ${{ secrets.GITHUB_TOKEN }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin
DIAMONDS_DOCKER_TAG=main-${{ github.sha }} docker-compose -f docker-compose.prod-run.yml up -d
- name: Update autoscaler
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.DEPLOY_ETIMO_AWS_AUTOSCALER_HOST }}
USERNAME: ${{ secrets.DEPLOY_ETIMO_AWS_USERNAME }}
PORT: 22
KEY: ${{ secrets.DEPLOY_ETIMO_AWS_KEY }}
script: |
cd diamonds2
git fetch
git checkout --progress --force ${{ github.sha }}
- name: Update deployment status (success)
if: success()
uses: chrnorm/deployment-status@releases/v1
with:
token: "${{ github.token }}"
target_url: https://diamonds.etimo.se
state: "success"
deployment_id: ${{ steps.deployment.outputs.deployment_id }}
- name: Update deployment status (failure)
if: failure()
uses: chrnorm/deployment-status@releases/v1
with:
token: "${{ github.token }}"
target_url: https://diamonds.etimo.se
state: "failure"
deployment_id: ${{ steps.deployment.outputs.deployment_id }}