This repository has been archived by the owner on Apr 4, 2024. It is now read-only.
Update README.md #7
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: Release | |
on: | |
push: | |
branches: ['main'] | |
jobs: | |
preconditions: | |
runs-on: ubuntu-latest | |
outputs: | |
repo_name: ${{ steps.repo_ids.outputs.REPO_NAME }} | |
org_name: ${{ steps.repo_ids.outputs.ORG_NAME }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v2 | |
with: | |
fetch-depth: 0 | |
- name: Check token | |
run: | | |
if [ -z "${{ secrets.GITHUB_TOKEN }}"]; then | |
echo "Must provide a GITHUB_TOKEN secret in order to run release workflow" | |
exit 1 | |
fi | |
- name: Get repository identifiers | |
id: repo_ids | |
run: | | |
REPO_NAME=$(echo "${{ github.event.repository.name }}" | tr '[:upper:]' '[:lower:]') | |
ORG_NAME=$(echo "${{ github.event.repository.owner.name }}" | tr '[:upper:]' '[:lower:]') | |
echo "::set-output name=REPO_NAME::$REPO_NAME" | |
echo "::set-output name=ORG_NAME::$ORG_NAME" | |
helm-lint: | |
runs-on: ubuntu-latest | |
needs: [preconditions] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v2 | |
with: | |
fetch-depth: 0 | |
- name: Set up Helm | |
uses: azure/setup-helm@v1 | |
with: | |
version: v3.4.0 | |
- uses: actions/setup-python@v2 | |
with: | |
python-version: 3.7 | |
- name: Set up chart-testing | |
uses: helm/[email protected] | |
- name: Run chart-testing (lint) | |
run: ct lint --validate-maintainers false --charts helm/${{ needs.preconditions.outputs.repo_name }}/ | |
helm-test: | |
runs-on: ubuntu-latest | |
needs: [preconditions] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v2 | |
with: | |
fetch-depth: 0 | |
- name: Setup QEMU | |
uses: docker/setup-qemu-action@v1 | |
with: | |
platforms: all | |
- name: Setup Docker Buildx | |
id: buildx | |
uses: docker/setup-buildx-action@v1 | |
with: | |
buildkitd-flags: '--debug' | |
- name: Set up Helm | |
uses: azure/setup-helm@v1 | |
with: | |
version: v3.4.0 | |
- uses: actions/setup-python@v2 | |
with: | |
python-version: 3.7 | |
- name: Set up chart-testing | |
uses: helm/[email protected] | |
- name: Setup Minikube | |
uses: manusa/[email protected] | |
with: | |
minikube version: 'v1.17.1' | |
kubernetes version: 'v1.19.2' | |
- name: Login to minikube docker registry | |
run: eval $(minikube -p minikube docker-env) | |
- name: Build and Publish image | |
uses: docker/build-push-action@v2 | |
with: | |
builder: ${{ steps.buildx.outputs.name }} | |
context: . | |
load: true | |
file: ./Dockerfile | |
tags: | | |
${{ needs.preconditions.outputs.repo_name }}:latest | |
labels: | | |
org.opencontainers.image.title=${{ needs.preconditions.outputs.repo_name }} | |
org.opencontainers.image.description=${{ github.event.repository.description }} | |
org.opencontainers.image.source=${{ github.event.repository.html_url }} | |
org.opencontainers.image.url=${{ github.event.repository.html_url }} | |
org.opencontainers.image.revision=${{ github.sha }} | |
- name: Run chart-testing (install) | |
run: ct install --charts helm/${{ needs.preconditions.outputs.repo_name }}/ | |
lint: | |
name: Run lint | |
runs-on: ubuntu-latest | |
needs: [preconditions] | |
steps: | |
- uses: actions/checkout@master | |
- uses: actions/setup-node@master | |
with: | |
node-version: 16.x | |
- name: Cache Node.js modules | |
uses: actions/cache@v1 | |
with: | |
path: ~/.npm # npm cache files are stored in `~/.npm` on Linux/macOS | |
key: ${{ runner.OS }}-node-${{ hashFiles('**/package-lock.json') }} | |
restore-keys: | | |
${{ runner.OS }}-node- | |
${{ runner.OS }}- | |
- name: Install Packages | |
run: npm ci | |
- name: Lint | |
run: npm run lint | |
dependency-check: | |
name: Run dependency check | |
runs-on: ubuntu-latest | |
needs: [preconditions] | |
steps: | |
- uses: actions/checkout@master | |
- uses: actions/setup-node@master | |
with: | |
node-version: 16.x | |
- name: Cache Node.js modules | |
uses: actions/cache@v1 | |
with: | |
path: ~/.npm # npm cache files are stored in `~/.npm` on Linux/macOS | |
key: ${{ runner.OS }}-node-${{ hashFiles('**/package-lock.json') }} | |
restore-keys: | | |
${{ runner.OS }}-node- | |
${{ runner.OS }}- | |
- name: Install Packages | |
run: npm ci | |
- name: Dependency Check | |
run: npm run depcheck | |
tests: | |
name: Run tests | |
runs-on: ubuntu-latest | |
needs: [preconditions] | |
steps: | |
- uses: actions/checkout@master | |
- uses: actions/setup-node@master | |
with: | |
node-version: 16.x | |
- name: Cache Node.js modules | |
uses: actions/cache@v1 | |
with: | |
path: ~/.npm # npm cache files are stored in `~/.npm` on Linux/macOS | |
key: ${{ runner.OS }}-node-${{ hashFiles('**/package-lock.json') }} | |
restore-keys: | | |
${{ runner.OS }}-node- | |
${{ runner.OS }}- | |
- name: Install Packages | |
run: npm ci | |
- name: Setup dependencies | |
run: docker-compose up -d | |
- name: Sleep | |
uses: kibertoad/[email protected] | |
with: | |
time: '30s' | |
- name: Run migration scripts | |
run: npx knex migrate:latest | |
- name: Run tests | |
run: npm run test | |
check-version: | |
name: 'Check version' | |
runs-on: ubuntu-latest | |
outputs: | |
is_new_version: ${{ steps.get_version.outputs.IS_NEW_VERSION }} | |
version: ${{ steps.get_version.outputs.VERSION }} | |
build_date: ${{ steps.get_version.outputs.BUILD_DATE }} | |
is_prerelease: ${{ steps.get_version.outputs.IS_PRERELEASE }} | |
steps: | |
- uses: actions/checkout@v2 | |
- run: git fetch --depth=1 --tags origin | |
- name: Install yq | |
run: sudo snap install yq | |
- name: Check Build Version | |
id: get_version | |
run: ./scripts/check-version.sh | |
shell: bash | |
- name: Skipping release as version has not increased | |
if: steps.get_version.outputs.IS_NEW_VERSION != 'true' | |
shell: bash | |
run: | | |
echo "Skipping release as current version has already been published" | |
publish: | |
name: 'Publish package' | |
needs: [preconditions, helm-lint, helm-test, lint, dependency-check, tests, check-version] | |
runs-on: ubuntu-latest | |
if: ${{ needs.check-version.outputs.is_new_version == 'true' }} | |
steps: | |
- uses: actions/checkout@v2 | |
# Docker build | |
- name: Setup QEMU | |
uses: docker/setup-qemu-action@v1 | |
with: | |
platforms: all | |
- name: Setup Docker Buildx | |
id: buildx | |
uses: docker/setup-buildx-action@v1 | |
with: | |
buildkitd-flags: '--debug' | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@v1 | |
with: | |
registry: ghcr.io | |
username: $GITHUB_ACTOR | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Publish multi-arch image | |
uses: docker/build-push-action@v2 | |
with: | |
push: true | |
builder: ${{ steps.buildx.outputs.name }} | |
context: . | |
file: ./Dockerfile | |
platforms: linux/amd64, linux/arm64 | |
tags: | | |
ghcr.io/${{ needs.preconditions.outputs.org_name }}/${{ needs.preconditions.outputs.repo_name }}:${{ needs.check-version.outputs.version }} | |
ghcr.io/${{ needs.preconditions.outputs.org_name }}/${{ needs.preconditions.outputs.repo_name }}:latest | |
labels: | | |
org.opencontainers.image.title=${{ needs.preconditions.outputs.repo_name }} | |
org.opencontainers.image.description=${{ github.event.repository.description }} | |
org.opencontainers.image.source=${{ github.event.repository.html_url }} | |
org.opencontainers.image.url=${{ github.event.repository.html_url }} | |
org.opencontainers.image.revision=${{ github.sha }} | |
org.opencontainers.image.version=${{ needs.check-version.outputs.version }} | |
org.opencontainers.image.created=${{ needs.check-version.outputs.build_date }} | |
# Publish helm charts | |
- name: Publish Helm charts | |
uses: stefanprodan/helm-gh-pages@master | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
charts_dir: helm | |
# Build github release | |
- name: Delete latest release | |
uses: actions/github-script@v5 | |
with: | |
github-token: ${{secrets.GITHUB_TOKEN}} | |
script: | | |
const { owner, repo } = context.repo | |
try { | |
await github.rest.git.deleteRef({ owner, repo, ref: 'tags/latest' }) | |
} | |
catch (err) { | |
if (err.status !== 422) throw err | |
} | |
- name: Build release version | |
uses: softprops/action-gh-release@v1 | |
with: | |
token: '${{ secrets.GITHUB_TOKEN }}' | |
tag_name: ${{ needs.check-version.outputs.version }} | |
prerelease: false | |
name: ${{ needs.check-version.outputs.version }} | |
generate_release_notes: true | |
- name: Build release latest | |
uses: softprops/action-gh-release@v1 | |
with: | |
token: '${{ secrets.GITHUB_TOKEN }}' | |
tag_name: latest | |
prerelease: false | |
name: Latest ${{ needs.check-version.outputs.version }} | |
generate_release_notes: true |