feat: add Homebrew and Scoop publishing scripts, enhance versioning metadata
This commit is contained in:
Executable
+124
@@ -0,0 +1,124 @@
|
||||
#!/usr/bin/env bash
|
||||
# Renders Homebrew Formula + Scoop manifest files for this release and
|
||||
# pushes them into the shared tap repo (see .gitea/workflows/release.yml).
|
||||
# Other tools publishing into the same tap repo can copy this script
|
||||
# verbatim — only SRC_HOMEPAGE/BIN_NAME/DESC below need to change.
|
||||
set -euo pipefail
|
||||
|
||||
: "${VERSION:?VERSION (e.g. v1.2.3) is required}"
|
||||
: "${TAP_TOKEN:?TAP_TOKEN secret is required}"
|
||||
|
||||
TAP_REPO_URL="https://tap:${TAP_TOKEN}@git.morlana.online/f.weber/homebrew-tap.git"
|
||||
TAP_BRANCH="main"
|
||||
|
||||
BIN_NAME="vault-tui"
|
||||
DESC="Terminal UI and CLI for HashiCorp Vault"
|
||||
SRC_HOMEPAGE="https://git.morlana.online/f.weber/vault-tui"
|
||||
RELEASE_BASE="${SRC_HOMEPAGE}/releases/download/${VERSION}"
|
||||
DIST="dist"
|
||||
VER_NUM="${VERSION#v}" # Formula/manifest "version" fields conventionally omit the leading v
|
||||
|
||||
sha() { # sha <checksums-file> <asset-filename>
|
||||
grep " $2\$" "$1" | awk '{print $1}'
|
||||
}
|
||||
|
||||
CK="${DIST}/checksums-${BIN_NAME}-${VERSION}.txt"
|
||||
CK_CLOUD="${DIST}/checksums-${BIN_NAME}-cloud-${VERSION}.txt"
|
||||
|
||||
SHA_LINUX_AMD64=$(sha "$CK" "${BIN_NAME}-${VERSION}-linux-amd64.tar.gz")
|
||||
SHA_LINUX_ARM64=$(sha "$CK" "${BIN_NAME}-${VERSION}-linux-arm64.tar.gz")
|
||||
SHA_DARWIN_AMD64=$(sha "$CK" "${BIN_NAME}-${VERSION}-darwin-amd64.tar.gz")
|
||||
SHA_DARWIN_ARM64=$(sha "$CK" "${BIN_NAME}-${VERSION}-darwin-arm64.tar.gz")
|
||||
SHA_WINDOWS_AMD64=$(sha "$CK" "${BIN_NAME}-${VERSION}-windows-amd64.zip")
|
||||
|
||||
SHA_CLOUD_LINUX_AMD64=$(sha "$CK_CLOUD" "${BIN_NAME}-cloud-${VERSION}-linux-amd64.tar.gz")
|
||||
SHA_CLOUD_LINUX_ARM64=$(sha "$CK_CLOUD" "${BIN_NAME}-cloud-${VERSION}-linux-arm64.tar.gz")
|
||||
SHA_CLOUD_DARWIN_AMD64=$(sha "$CK_CLOUD" "${BIN_NAME}-cloud-${VERSION}-darwin-amd64.tar.gz")
|
||||
SHA_CLOUD_DARWIN_ARM64=$(sha "$CK_CLOUD" "${BIN_NAME}-cloud-${VERSION}-darwin-arm64.tar.gz")
|
||||
SHA_CLOUD_WINDOWS_AMD64=$(sha "$CK_CLOUD" "${BIN_NAME}-cloud-${VERSION}-windows-amd64.zip")
|
||||
|
||||
WORKDIR=$(mktemp -d)
|
||||
trap 'rm -rf "$WORKDIR"' EXIT
|
||||
|
||||
git clone --depth 1 --branch "$TAP_BRANCH" "$TAP_REPO_URL" "$WORKDIR"
|
||||
cd "$WORKDIR"
|
||||
mkdir -p Formula bucket
|
||||
|
||||
render_formula() { # render_formula <class> <bin-prefix> <install-name>
|
||||
local class="$1" prefix="$2" install_name="$3"
|
||||
local sha_l_amd sha_l_arm sha_d_amd sha_d_arm
|
||||
if [ "$prefix" = "${BIN_NAME}-cloud" ]; then
|
||||
sha_l_amd="$SHA_CLOUD_LINUX_AMD64"; sha_l_arm="$SHA_CLOUD_LINUX_ARM64"
|
||||
sha_d_amd="$SHA_CLOUD_DARWIN_AMD64"; sha_d_arm="$SHA_CLOUD_DARWIN_ARM64"
|
||||
else
|
||||
sha_l_amd="$SHA_LINUX_AMD64"; sha_l_arm="$SHA_LINUX_ARM64"
|
||||
sha_d_amd="$SHA_DARWIN_AMD64"; sha_d_arm="$SHA_DARWIN_ARM64"
|
||||
fi
|
||||
cat <<EOF
|
||||
class ${class} < Formula
|
||||
desc "${DESC}"
|
||||
homepage "${SRC_HOMEPAGE}"
|
||||
version "${VER_NUM}"
|
||||
|
||||
on_macos do
|
||||
if Hardware::CPU.arm?
|
||||
url "${RELEASE_BASE}/${prefix}-${VERSION}-darwin-arm64.tar.gz"
|
||||
sha256 "${sha_d_arm}"
|
||||
else
|
||||
url "${RELEASE_BASE}/${prefix}-${VERSION}-darwin-amd64.tar.gz"
|
||||
sha256 "${sha_d_amd}"
|
||||
end
|
||||
end
|
||||
|
||||
on_linux do
|
||||
if Hardware::CPU.arm?
|
||||
url "${RELEASE_BASE}/${prefix}-${VERSION}-linux-arm64.tar.gz"
|
||||
sha256 "${sha_l_arm}"
|
||||
else
|
||||
url "${RELEASE_BASE}/${prefix}-${VERSION}-linux-amd64.tar.gz"
|
||||
sha256 "${sha_l_amd}"
|
||||
end
|
||||
end
|
||||
|
||||
def install
|
||||
Dir["${prefix}-*"].each { |f| bin.install f => "${install_name}" }
|
||||
end
|
||||
|
||||
test do
|
||||
assert_match version.to_s, shell_output("#{bin}/${install_name} version")
|
||||
end
|
||||
end
|
||||
EOF
|
||||
}
|
||||
|
||||
render_scoop() { # render_scoop <bin-prefix> <exe-name> <sha256>
|
||||
local prefix="$1" exe_name="$2" sha="$3"
|
||||
cat <<EOF
|
||||
{
|
||||
"version": "${VER_NUM}",
|
||||
"description": "${DESC}",
|
||||
"homepage": "${SRC_HOMEPAGE}",
|
||||
"url": "${RELEASE_BASE}/${prefix}-${VERSION}-windows-amd64.zip",
|
||||
"hash": "${sha}",
|
||||
"bin": [["${prefix}-${VERSION}-windows-amd64.exe", "${exe_name}.exe"]]
|
||||
}
|
||||
EOF
|
||||
}
|
||||
|
||||
render_formula "VaultTui" "${BIN_NAME}" "${BIN_NAME}" >Formula/vault-tui.rb
|
||||
render_formula "VaultTuiCloud" "${BIN_NAME}-cloud" "${BIN_NAME}-cloud" >Formula/vault-tui-cloud.rb
|
||||
render_scoop "${BIN_NAME}" "vault-tui" "${SHA_WINDOWS_AMD64}" >bucket/vault-tui.json
|
||||
render_scoop "${BIN_NAME}-cloud" "vault-tui-cloud" "${SHA_CLOUD_WINDOWS_AMD64}" >bucket/vault-tui-cloud.json
|
||||
|
||||
git config user.name "vault-tui-release"
|
||||
git config user.email "vault-tui-bot@users.noreply.git.morlana.online"
|
||||
git add Formula/vault-tui.rb Formula/vault-tui-cloud.rb bucket/vault-tui.json bucket/vault-tui-cloud.json
|
||||
|
||||
if git diff --cached --quiet; then
|
||||
echo "tap already up to date with ${VERSION}, nothing to push"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
git commit -m "vault-tui ${VERSION}"
|
||||
git push origin "HEAD:${TAP_BRANCH}"
|
||||
echo "pushed vault-tui ${VERSION} to the tap"
|
||||
@@ -26,9 +26,12 @@ jobs:
|
||||
run: make test
|
||||
|
||||
- name: Build all artifacts (default + cloud, all platforms)
|
||||
env:
|
||||
VERSION: ${{ gitea.event.release.tag_name }}
|
||||
PRERELEASE: ${{ gitea.event.release.prerelease }}
|
||||
run: |
|
||||
make release
|
||||
make release-cloud
|
||||
make release VERSION="$VERSION" PRERELEASE="$PRERELEASE"
|
||||
make release-cloud VERSION="$VERSION" PRERELEASE="$PRERELEASE"
|
||||
|
||||
- name: Upload artifacts to release
|
||||
env:
|
||||
@@ -43,3 +46,13 @@ jobs:
|
||||
-F "attachment=@${f};filename=${name}" \
|
||||
"${api}?name=${name}"
|
||||
done
|
||||
|
||||
# Homebrew/Linuxbrew tap + Scoop bucket: only for stable releases —
|
||||
# a prerelease shouldn't become what `brew install`/`scoop install`
|
||||
# resolve to by default. See .gitea/scripts/publish-tap.sh.
|
||||
- name: Publish Homebrew/Scoop tap
|
||||
if: gitea.event.release.prerelease != true
|
||||
env:
|
||||
VERSION: ${{ gitea.event.release.tag_name }}
|
||||
TAP_TOKEN: ${{ secrets.TAP_TOKEN }}
|
||||
run: .gitea/scripts/publish-tap.sh
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
name: Test
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
pull_request:
|
||||
branches: [main]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
testing:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Set up Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version-file: go.mod
|
||||
|
||||
- name: Test
|
||||
run: make check
|
||||
Reference in New Issue
Block a user