Skip to content

v0.9.1

v0.9.1 #15

Workflow file for this run

name: ChannelWatch - Build and Push to Docker Hub + GHCR
run-name: ${{ github.ref_name }}
on:
workflow_dispatch:
push:
tags:
- 'v*'
concurrency:
group: docker-${{ github.ref }}
cancel-in-progress: true
env:
DOCKERHUB_IMAGE: coderluii/channelwatch
GHCR_IMAGE: ghcr.io/coderluii/channelwatch
DOCKER_PLATFORMS: linux/amd64,linux/arm64
jobs:
build-and-push:
name: Build and push Docker image
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
attestations: write
id-token: write
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Parse version
id: version
shell: bash
run: |
raw="${GITHUB_REF_NAME}"
version="${raw#v}"
echo "version=${version}" >> "${GITHUB_OUTPUT}"
- name: Verify CHANGELOG entry
if: startsWith(github.ref, 'refs/tags/v')
shell: bash
run: |
raw_ref="${GITHUB_REF_NAME}"
version="${{ steps.version.outputs.version }}"
if [[ ! "${raw_ref}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "::error::Release tags must use vX.Y.Z format, got ${raw_ref}."
exit 1
fi
version_re="${version//./\\.}"
if ! grep -Eq "^## \\[${version_re}\\] - [0-9]{4}-[0-9]{2}-[0-9]{2}$" docs/releases/CHANGELOG.md; then
echo "::error::docs/releases/CHANGELOG.md has no release heading for ${version}. Add '## [${version}] - YYYY-MM-DD' before tagging."
exit 1
fi
- name: Free up disk space
run: |
sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc /opt/hostedtoolcache
sudo apt-get clean
docker system prune -af
df -h
- name: Set up QEMU
uses: docker/setup-qemu-action@06116385d9baf250c9f4dcb4858b16962ea869c3 # v4.1.0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 # v4.1.0
- name: Login to Docker Hub
uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4.2.0
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GHCR
uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4.2.0
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GHCR_TOKEN }}
- name: Extract metadata
id: meta
uses: docker/metadata-action@80c7e94dd9b9319bd5eb7a0e0fe9291e23a2a2e9 # v6.1.0
with:
images: |
${{ env.DOCKERHUB_IMAGE }}
${{ env.GHCR_IMAGE }}
tags: |
type=raw,value=latest,enable=${{ startsWith(github.ref, 'refs/tags/v') }}
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=sha,prefix=sha-,format=short
- name: Build and push
id: build
uses: docker/build-push-action@f9f3042f7e2789586610d6e8b85c8f03e5195baf # v7.2.0
with:
context: .
file: deploy/docker/Dockerfile
platforms: ${{ env.DOCKER_PLATFORMS }}
push: true
tags: ${{ steps.meta.outputs.tags }}
build-args: |
VERSION=${{ steps.version.outputs.version }}
GIT_SHA=${{ github.sha }}
BUILD_DATE=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }}
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Attest build provenance
if: startsWith(github.ref, 'refs/tags/v')
uses: actions/attest-build-provenance@a2bbfa25375fe432b6a289bc6b6cd05ecd0c4c32 # v4.1.0
with:
subject-name: index.docker.io/${{ env.DOCKERHUB_IMAGE }}
subject-digest: ${{ steps.build.outputs.digest }}
push-to-registry: true
update-dockerhub-description:
name: Update Docker Hub description
runs-on: ubuntu-latest
needs: build-and-push
if: startsWith(github.ref, 'refs/tags/v')
permissions:
contents: read
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Update Docker Hub description
uses: peter-evans/dockerhub-description@1b9a80c056b620d92cedb9d9b5a223409c68ddfa # v5.0.0
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
repository: ${{ env.DOCKERHUB_IMAGE }}
readme-filepath: docs/dockerhub-description.md