Skip to content

Commit

Permalink
fix: Release workflow ⚓
Browse files Browse the repository at this point in the history
  • Loading branch information
gabyx committed Apr 21, 2024
1 parent ee2b532 commit 09d2487
Show file tree
Hide file tree
Showing 6 changed files with 148 additions and 19 deletions.
59 changes: 49 additions & 10 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ jobs:
with:
fetch-depth: 0

- name: Fetch annotated tags
run: |
git fetch origin --force "$GITHUB_REF:$GITHUB_REF"
- name: Set up Go
uses: actions/setup-go@v2
with:
Expand All @@ -31,8 +35,8 @@ jobs:
- name: Store Git Tag
id: "getTag"
run: |
echo ::set-output name=releaseTag::$(echo "${GITHUB_REF##*prepare-}")
echo ::set-output name=triggerTag::$(echo "${GITHUB_REF##*/}")
echo "releaseTag=${GITHUB_REF##*prepare-}" >> $GITHUB_OUTPUT
echo "triggerTag=${GITHUB_REF##*/}" >> $GITHUB_OUTPUT
- name: "Tag release commit"
env:
Expand All @@ -42,10 +46,17 @@ jobs:
git config user.name 'githooks-bot'
git config user.email 'githooks-bot@users.noreply.github.com'
# Check we got an annotated tag.
[ "$(git cat-file -t "$TRIGGER_TAG")" = "tag" ] || {
echo "Tag '$TRIGGER_TAG' is not an annotated tag."
exit 1
}
# Gets the message on the annotated commit:
deref() { git for-each-ref "refs/tags/$TRIGGER_TAG" --format="%($1)" ; };
# Creates a new tag with the same message, including trailing headers.
git tag "$RELEASE_TAG" -a -m "$(deref contents)"
git tag -a -m "$(deref contents)" "$RELEASE_TAG"
git tag "githooks/$RELEASE_TAG"
- name: Define Release Branch
Expand All @@ -57,39 +68,68 @@ jobs:
RELEASE_BRANCH="main"
RELEASE_VERSION="${RELEASE_TAG##v}"
regex="^Release-Branch:\s+(.*)$"
echo "Get release branch on tag '$RELEASE_TAG'."
# Gets the message on the annotated commit:
deref() {
git for-each-ref "refs/tags/$RELEASE_TAG" --format="%($1)" ;
};
deref contents
regex="^Release-Branch:\s+(.*)$"
if deref contents | grep -qE "$regex"; then
RELEASE_BRANCH=$(deref contents | grep -E "$regex" |
sed -E "s/$regex/\1/") || {
echo "Release-Branch trailer is wrong."
exit 1
}
[ -n "$RELEASE_BRANCH" ] || {
echo "Release-Branch trailer is empty."
exit 1
}
fi
# Fetch the branch.
git fetch --depth 50 origin "$RELEASE_BRANCH"
# Check if its reachable.
[ -n "$(git rev-list --first-parent \
--ancestry-path
--ancestry-path \
"$RELEASE_TAG^..origin/$RELEASE_BRANCH")" ] || {
echo "Tag is not reachable from '$RELEASE_BRANCH' (--first-parent) !" >&2
exit 1
}
echo ::set-output name=releaseVersion ::$RELEASE_VERSION
echo ::set-output name=releaseBranch ::$RELEASE_BRANCH
# Use only a small release config
# when not on `main` branch.
if [ "$RELEASE_BRANCH" != "main"]; then
echo "Writing release note"
echo "**WARNING: Do not install this version! For internal testing only.**" >githooks/.release-notes.md
fi
echo "releaseVersion=$RELEASE_VERSION" >> $GITHUB_OUTPUT
echo "releaseBranch=$RELEASE_BRANCH" >> $GITHUB_OUTPUT
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v2
if: ${{ steps.releaseBranch.outputs.releaseBranch == 'main' }}
uses: goreleaser/goreleaser-action@v5
with:
version: latest
workdir: githooks
args: "release --clean"
env:
GORELEASER_CURRENT_TAG: ${{ steps.getTag.outputs.releaseTag }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GPG_FINGERPRINT: ${{ steps.import_gpg.outputs.fingerprint }}

- name: Run GoReleaser (non-main)
if: ${{ steps.releaseBranch.outputs.releaseBranch != 'main' }}
uses: goreleaser/goreleaser-action@v5
with:
version: latest
workdir: githooks
args: release --clean
args: "release --clean -f .goreleaser-small.yaml --release-notes githooks/.release-notes.md"
env:
GORELEASER_CURRENT_TAG: ${{ steps.getTag.outputs.releaseTag }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Expand All @@ -102,5 +142,4 @@ jobs:
run: |
# go releaser already pushed release tag
git push origin "githooks/$RELEASE_TAG"
git push -f origin ":$TRIGGER_TAG"
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -1514,10 +1514,10 @@ matches the regex `^Update-NoSkip: *true`, than this version **will not be
skipped**. This feature enables to enforce an update to a specific version. In
some cases this is useful (serialization changes etc.).

The single-line commit trailers `^Update-Info: *(.*)` on version tagged commits
are used to assemble a small changelog during update, which is presented to the
user. The single line can contain important information/links to relevant fixes
and changes.
The single-line commit trailers `^Update-Info: *(.*)` (multiple ones allowed) on
the annotated tag is used to assemble a small changelog during update, which is
presented to the user. The single line can contain important information/links
to relevant fixes and changes.

You can also check for updates at any time by executing
[`git hooks update`](docs/cli/git_hooks_update.md) or using
Expand Down
88 changes: 88 additions & 0 deletions githooks/.goreleaser-small.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
# Check Documentation:
# https://goreleaser.com/customization/
project_name: githooks
before:
hooks:
- go mod download
- go mod vendor
- go generate -mod=vendor ./...
builds:
- id: runner
binary: runner
main: ./apps/runner
env: &ENV
- CGO_ENABLED=0
goos: &GOOS
- linux
goarch: &GOARCH
- amd64
- id: cli
binary: cli
main: ./apps/cli
env: *ENV
goos: *GOOS
goarch: *GOARCH
- id: dialog
binary: dialog
main: ./apps/dialog
env: *ENV
goos: *GOOS
goarch: *GOARCH
archives:
- id: githooks
builds:
- runner
- cli
- dialog
name_template: '{{ .ProjectName }}-{{ .Version }}-{{ if eq .Os "darwin" }}macos{{else}}{{ .Os }}{{end}}.{{ .Arch }}'
format: tar.gz
files:
- none*
format_overrides:
- goos: windows
format: zip
checksum:
name_template: "{{ .ProjectName }}.checksums"
algorithm: sha256
snapshot:
name_template: "{{ .Tag }}"
changelog:
filters:
# Commit messages matching the regexp listed here will be removed from
# the changelog
exclude:
- '^\[np\]'
- '^\[docs\]'
signs:
- artifacts: checksum
cmd: gpg
# Signing with the private key where 'deploy.asc' is this public key in this repo.
args:
[
"-u",
"{{ .Env.GPG_FINGERPRINT }}",
"--output",
"${signature}",
"--detach-sign",
"${artifact}",
]
signature: "${artifact}.sig"
release:
github:
owner: gabyx
name: githooks
prerelease: auto
# Use these values for you own gitea instance...
# gitea_urls:
# api: "https://git.company.com/api/v1"
# download: "https://git.company.com"
# # set to true if you use a self-signed certificate
# skip_tls_verify: true

# Use these values for you own github instance...
# github_urls:
# api: https://git.company.com/api/v3/
# upload: https://git.company.com/api/uploads/
# download: https://git.company.com/
# # set to true if you use a self-signed certificate
# skip_tls_verify: false
6 changes: 3 additions & 3 deletions githooks/.goreleaser.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ before:
- go generate -mod=vendor ./...
builds:
- id: runner
binary: runner
binary: githooks-runner
main: ./apps/runner
env: &ENV
- CGO_ENABLED=0
Expand All @@ -35,14 +35,14 @@ builds:
- goos: windows
goarch: arm64
- id: cli
binary: cli
binary: githooks-cli
main: ./apps/cli
env: *ENV
goos: *GOOS
goarch: *GOARCH
ignore: *IGNORE
- id: dialog
binary: dialog
binary: githooks-dialog
main: ./apps/dialog
env: *ENV
goos: *GOOS
Expand Down
4 changes: 3 additions & 1 deletion nix/pkgs/version.json
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
{ "version": "3.0.0" }
{
"version": "3.0.0-rc1"
}
2 changes: 1 addition & 1 deletion scripts/release.sh
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ function commit_version_file() {
jq ".version |= \"$version\"" nix/pkgs/version.json >"$temp"
mv "$temp" nix/pkgs/version.json

if git diff --quiet --exit-code; then
if ! git diff --quiet --exit-code; then
git add nix/pkgs/version.json
git commit -m "np: Update version to '$version'"
fi
Expand Down

0 comments on commit 09d2487

Please sign in to comment.