name: Build & Release Docker Image on: push: tags: - 'v*.*.*' workflow_dispatch: inputs: tag: description: 'Existing tag to release (e.g. v0.1.0)' required: true type: string jobs: build-and-push: runs-on: ubuntu-latest permissions: contents: read packages: write env: IMAGE: git.warky.dev/wdevs/pgsql-broker TAG: ${{ github.event_name == 'workflow_dispatch' && inputs.tag || github.ref_name }} steps: - name: Validate release tag run: | case "$TAG" in v*) ;; *) echo "Release tags must start with v (received: $TAG)" >&2; exit 1 ;; esac - uses: actions/checkout@v4 with: ref: ${{ github.event_name == 'workflow_dispatch' && inputs.tag || github.ref }} - uses: docker/setup-buildx-action@v3 - name: Verify package registry credentials env: PACKAGE_REGISTRY_USERNAME: ${{ secrets.PACKAGE_REGISTRY_USERNAME }} PACKAGE_REGISTRY_TOKEN: ${{ secrets.PACKAGE_REGISTRY_TOKEN }} run: | test -n "$PACKAGE_REGISTRY_USERNAME" || { echo 'PACKAGE_REGISTRY_USERNAME is required to publish the Docker image.' >&2 exit 1 } test -n "$PACKAGE_REGISTRY_TOKEN" || { echo 'PACKAGE_REGISTRY_TOKEN is required to publish the Docker image.' >&2 exit 1 } - name: Log in to the Warky container registry uses: docker/login-action@v3 with: registry: git.warky.dev username: ${{ secrets.PACKAGE_REGISTRY_USERNAME }} password: ${{ secrets.PACKAGE_REGISTRY_TOKEN }} - name: Build and push image uses: docker/build-push-action@v5 with: context: . file: Dockerfile push: true build-args: | VERSION=${{ env.TAG }} COMMIT=${{ github.sha }} BUILD_TIME=${{ github.event.head_commit.timestamp || github.event.repository.updated_at }} tags: | ${{ env.IMAGE }}:${{ env.TAG }} ${{ env.IMAGE }}:latest labels: | org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }} org.opencontainers.image.revision=${{ github.sha }} org.opencontainers.image.version=${{ env.TAG }}