Skip to content

Commit

Permalink
Publish releases from GHA
Browse files Browse the repository at this point in the history
Automatically publish releases to NPM and Docker Hub from GHA. Only
performs a release, when:

- all tests pass
- a new git tag is pushed (expected format "v1.0.0")
- git tag matches the version in package.json

The gating of releases happens in the 'check-release' job, which all
future release-* jobs depend on. This is where any final linting or
sanity checking can be done.
  • Loading branch information
jonsmock committed Nov 22, 2024
1 parent 84df620 commit ce39cf0
Showing 1 changed file with 71 additions and 0 deletions.
71 changes: 71 additions & 0 deletions .github/workflows/push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,74 @@ jobs:
run: |
export FORCE_COLOR=1
./dcmon --static-once dcmon-test ./examples/checks.yaml
# Decide if a release is necessary, do any release linting/checks
check-release:
needs: [ compose-tests ]
name: Check Release
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/v') && contains(github.ref, '.')
outputs:
RELEASE_VERSION: ${{ steps.get-version.outputs.RELEASE_VERSION }}
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with: { submodules: 'recursive', fetch-depth: 0 }

- id: get-version
name: Get release version
run: |
echo "RELEASE_VERSION=$(jq -r .version package.json)" | tee "$GITHUB_ENV" | tee "$GITHUB_OUTPUT"
- name: Check git tag matches release version
run: |
[ "refs/tags/v${RELEASE_VERSION}" == "${{ github.ref }}" ]
release-npm:
needs: [ check-release ]
name: Release NPM
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with: { submodules: 'recursive', fetch-depth: 0 }

# Setup .npmrc file to publish to npm
- uses: actions/setup-node@v4
with:
node-version: '20.x'
registry-url: 'https://registry.npmjs.org'
scope: ''

- run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

release-docker-hub:
needs: [ check-release ]
name: Release Docker Hub
runs-on: ubuntu-latest
env:
RELEASE_VERSION: ${{ needs.check-release.outputs.RELEASE_VERSION }}
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with: { submodules: 'recursive', fetch-depth: 0 }

- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Build and push
uses: docker/build-push-action@v6
with:
push: true
tags: lonocloud/dcmon:${{ env.RELEASE_VERSION }}

- name: Build and push
uses: docker/build-push-action@v6
with:
push: true
tags: lonocloud/dcmon:latest

0 comments on commit ce39cf0

Please sign in to comment.