Files
kemkas-frontend/.github/workflows/ci.yml
T
morbalint 3d14c01093 add GitHub Container Registry too to CI (#3)
* add GitHub Container Registry too to CI

the GH Container Registry should be unlimited for public repos, and as such serve as an archive compared to the limited size DO container registry

* fix ghcr.io repository name

* use GHCR image ID in tagging
2024-01-19 11:27:41 +01:00

108 lines
4.0 KiB
YAML

name: CI compile & test & build
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
ci-fe:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js 18.x
uses: actions/setup-node@v3
with:
node-version: 18.x
- name: Cache NPM packages
uses: actions/cache@v3
with:
key: npm-${{ hashFiles('./Kemkas.Web/frontend/yarn.lock') }}
path: |
./Kemkas.Web/frontend/node_modules
restore-keys: |
npm-${{ hashFiles('./Kemkas.Web/frontend/yarn.lock') }}
npm-
- name: Yarn Install
run: |
cd ./Kemkas.Web/frontend
yarn install --frozen-lockfiles
- name: Yarn Test
run: |
cd ./Kemkas.Web/frontend
./compile-less.sh
yarn build
docker-build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: docker/setup-buildx-action@v3
- name: Install doctl
uses: digitalocean/action-doctl@v2
with:
token: ${{ secrets.DO_ACCESS_TOKEN }}
- name: Log in to DigitalOcean Container Registry with short-lived credentials
run: doctl registry login --expiry-seconds 1200
- name: Log in to GitHub Container Registry
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
- uses: docker/build-push-action@v5
with:
context: .
file: Kemkas.Web/Dockerfile
cache-from: type=gha
cache-to: type=gha,mode=max
push: false
load: true
tags: kemkas/kemkas:edge
- name: Tag container image
run: |
docker tag kemkas/kemkas:edge registry.digitalocean.com/kemkas/kemkas:${GITHUB_SHA::8}
docker tag kemkas/kemkas:edge ghcr.io/${{ github.repository_owner }}/kemkas:${GITHUB_SHA::8}
- name: Push image to Container Registry
run: |
docker push registry.digitalocean.com/kemkas/kemkas:${GITHUB_SHA::8}
docker push ghcr.io/${{ github.repository_owner }}/kemkas:${GITHUB_SHA::8}
deploy:
runs-on: ubuntu-latest
needs:
- ci-fe
- docker-build
if: ${{ github.event_name == 'push' || ( github.event_name == 'pull_request' && github.event.action == 'closed' && github.event.pull_request.merged ) }}
steps:
- uses: actions/checkout@v3
- name: Install doctl
uses: digitalocean/action-doctl@v2
with:
token: ${{ secrets.DO_ACCESS_TOKEN }}
- name: Log in to DigitalOcean Container Registry with short-lived credentials
run: doctl registry login --expiry-seconds 1200
- name: Log in to GitHub Container Registry
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
- name: Tag container image with latest tag
run: |
docker pull ghcr.io/${{ github.repository_owner }}/kemkas:${GITHUB_SHA::8}
docker pull registry.digitalocean.com/kemkas/kemkas:${GITHUB_SHA::8}
docker tag registry.digitalocean.com/kemkas/kemkas:${GITHUB_SHA::8} registry.digitalocean.com/kemkas/kemkas:latest
docker tag ghcr.io/${{ github.repository_owner }}/kemkas:${GITHUB_SHA::8} ghcr.io/${{ github.repository_owner }}/kemkas:latest
- name: Push image to Container Registry
run: |
docker push registry.digitalocean.com/kemkas/kemkas:latest
docker push ghcr.io/${{ github.repository_owner }}/kemkas:latest
- name: Get container image ID of the images just pushed
run: |
docker images ghcr.io/${{ github.repository_owner }}/kemkas:${GITHUB_SHA::8} --format "{{.ID}}"
export DOCKER_IMAGE_ID=$(docker images ghcr.io/${{ github.repository_owner }}/kemkas:${GITHUB_SHA::8} --format "{{.ID}}")
export DOCKER_IMAGE_ID=GHCR-$DOCKER_IMAGE_ID
echo "DOCKER_IMAGE_ID=$DOCKER_IMAGE_ID" >> $GITHUB_ENV
- name: Tag commit
uses: tvdias/github-tagger@v0.0.1
with:
repo-token: "${{ github.token }}"
tag: "${{ env.DOCKER_IMAGE_ID }}"