ci: ssh-action version #1027
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
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/[email protected] | |
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/[email protected] | |
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 }} |