Skip to content

Commit 0b8e3b1

Browse files
committed
feat: Add manual workflow dispatch for Docker builds
Adds workflow_dispatch trigger to the publish workflow to enable manual Docker image builds to both Docker Hub and GHCR without requiring a new release. This addresses issue #48 where users cannot pull from ghcr.io because Docker images weren't built for recent releases. Features: - Manual trigger with tag input (e.g., v1.0.1) - Docker-only mode to skip PyPI publishing - Proper ref checkout for tagged versions - Maintains backward compatibility with release events Usage: Workflow can be manually triggered from GitHub Actions UI to rebuild Docker images for any existing git tag. Fixes #48
1 parent 9914239 commit 0b8e3b1

File tree

1 file changed

+31
-10
lines changed

1 file changed

+31
-10
lines changed

.github/workflows/publish.yml

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,17 @@ name: Publish Package
33
on:
44
release:
55
types: [published]
6+
workflow_dispatch:
7+
inputs:
8+
docker_only:
9+
description: 'Build and push Docker images only (skip PyPI)'
10+
required: false
11+
type: boolean
12+
default: true
13+
tag:
14+
description: 'Git tag to build from (e.g., v1.0.1)'
15+
required: true
16+
type: string
617

718
permissions:
819
contents: read
@@ -11,12 +22,16 @@ permissions:
1122
jobs:
1223
deploy-test:
1324
runs-on: ubuntu-latest
25+
# Skip PyPI deployment when manually triggered with docker_only
26+
if: ${{ github.event_name == 'release' || !inputs.docker_only }}
1427
environment: testpypi
1528
permissions:
1629
id-token: write
1730

1831
steps:
1932
- uses: actions/checkout@v4
33+
with:
34+
ref: ${{ inputs.tag || github.ref }}
2035

2136
- name: Install Nix
2237
uses: cachix/install-nix-action@v31
@@ -39,14 +54,16 @@ jobs:
3954
deploy-prod:
4055
needs: deploy-test
4156
runs-on: ubuntu-latest
42-
# Only deploy to PyPI for non-prerelease versions
43-
if: ${{ !github.event.release.prerelease }}
57+
# Only deploy to PyPI for non-prerelease versions and skip when manually triggered with docker_only
58+
if: ${{ github.event_name == 'release' && !github.event.release.prerelease && (github.event_name == 'release' || !inputs.docker_only) }}
4459
environment: pypi
4560
permissions:
4661
id-token: write
4762

4863
steps:
4964
- uses: actions/checkout@v4
65+
with:
66+
ref: ${{ inputs.tag || github.ref }}
5067

5168
- name: Install Nix
5269
uses: cachix/install-nix-action@v31
@@ -65,13 +82,17 @@ jobs:
6582
uses: pypa/gh-action-pypi-publish@release/v1
6683

6784
docker:
68-
needs: deploy-test
85+
# Run if: (1) release event after test deploy, or (2) manual trigger
86+
needs: [deploy-test]
87+
if: ${{ always() && (github.event_name == 'release' && needs.deploy-test.result == 'success') || (github.event_name == 'workflow_dispatch') }}
6988
runs-on: ubuntu-latest
7089
permissions:
7190
packages: write
72-
91+
7392
steps:
7493
- uses: actions/checkout@v4
94+
with:
95+
ref: ${{ inputs.tag || github.ref }}
7596

7697
- name: Set up QEMU
7798
uses: docker/setup-qemu-action@v3
@@ -100,14 +121,14 @@ jobs:
100121
utensils/mcp-nixos
101122
ghcr.io/utensils/mcp-nixos
102123
tags: |
103-
# Latest tag for stable releases
104-
type=raw,value=latest,enable=${{ !github.event.release.prerelease }}
105-
# Version tag from release
106-
type=semver,pattern={{version}}
124+
# Latest tag for stable releases (not for prereleases)
125+
type=raw,value=latest,enable=${{ github.event_name == 'release' && !github.event.release.prerelease || github.event_name == 'workflow_dispatch' }}
126+
# Version tag from release or manual input
127+
type=semver,pattern={{version}},value=${{ inputs.tag || github.ref_name }}
107128
# Major.minor tag
108-
type=semver,pattern={{major}}.{{minor}}
129+
type=semver,pattern={{major}}.{{minor}},value=${{ inputs.tag || github.ref_name }}
109130
# Major tag (only for stable releases)
110-
type=semver,pattern={{major}},enable=${{ !github.event.release.prerelease }}
131+
type=semver,pattern={{major}},value=${{ inputs.tag || github.ref_name }},enable=${{ github.event_name == 'release' && !github.event.release.prerelease || github.event_name == 'workflow_dispatch' }}
111132
112133
- name: Build and push Docker image
113134
uses: docker/build-push-action@v6

0 commit comments

Comments
 (0)