mirror of
https://github.com/chenasraf/sofmani.git
synced 2026-05-17 17:28:04 +00:00
143 lines
4.1 KiB
YAML
143 lines
4.1 KiB
YAML
name: Release
|
|
|
|
on:
|
|
push:
|
|
branches: ["**"]
|
|
pull_request:
|
|
branches: ["**"]
|
|
|
|
permissions:
|
|
contents: write
|
|
pull-requests: write
|
|
|
|
jobs:
|
|
test:
|
|
name: Test
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Set up Go
|
|
uses: actions/setup-go@v4
|
|
with:
|
|
go-version: '1.23'
|
|
- name: Test
|
|
run: go test -v ./...
|
|
|
|
generate:
|
|
name: Build for ${{ matrix.platform }}
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- platform: linux/amd64
|
|
label: linux-amd64
|
|
- platform: darwin/amd64
|
|
label: darwin-amd64
|
|
- platform: darwin/arm64
|
|
label: darwin-arm64
|
|
- platform: windows/amd64
|
|
label: windows-amd64
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Build for ${{ matrix.label }}
|
|
uses: chenasraf/go-cross-build@v1
|
|
with:
|
|
platforms: ${{ matrix.platform }}
|
|
package: ''
|
|
name: 'sofmani'
|
|
compress: 'true'
|
|
dest: dist
|
|
|
|
- name: Upload build
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: "dist-${{ matrix.label }}"
|
|
path: dist
|
|
|
|
release-please:
|
|
name: Release
|
|
if: github.ref == 'refs/heads/master'
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
release_created: ${{ steps.release.outputs.release_created }}
|
|
tag_name: ${{ steps.release.outputs.tag_name }}
|
|
needs:
|
|
- test
|
|
- generate
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Download all builds
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
path: dist
|
|
|
|
- name: Verify Release Artifacts
|
|
run: |
|
|
ls -la dist
|
|
for i in "linux-amd64" "darwin-amd64" "windows-amd64" "darwin-arm64"; do
|
|
if [[ ! -f ./dist/dist-$i/sofmani-$i.tar.gz ]]; then
|
|
echo "File not found: ./dist/dist-$i/sofmani-$i.tar.gz"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
- name: Run Release Please
|
|
uses: googleapis/release-please-action@v4
|
|
id: release
|
|
with:
|
|
release-type: simple
|
|
|
|
- name: Upload Release Artifacts
|
|
if: ${{ steps.release.outputs.release_created }}
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
for i in "linux-amd64" "darwin-amd64" "darwin-arm64" "windows-amd64"; do
|
|
gh release upload "${{ steps.release.outputs.tag_name }}" "./dist/dist-$i/sofmani-$i.tar.gz"
|
|
done
|
|
|
|
release-homebrew:
|
|
name: Homebrew Release
|
|
needs: [release-please]
|
|
if: ${{ needs.release-please.outputs.release_created }}
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Get release body
|
|
id: release-body
|
|
env:
|
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
body=$(gh release view "${{ needs.release-please.outputs.tag_name }}" --repo "${{ github.repository }}" --json body -q .body)
|
|
echo "body<<EOF" >> "$GITHUB_OUTPUT"
|
|
echo "$body" >> "$GITHUB_OUTPUT"
|
|
echo "EOF" >> "$GITHUB_OUTPUT"
|
|
|
|
- name: Send dispatch to homebrew-tap
|
|
env:
|
|
GH_TOKEN: ${{ secrets.REPO_DISPATCH_PAT }}
|
|
run: |
|
|
repo="${{ github.event.repository.name }}"
|
|
tag="${{ needs.release-please.outputs.tag_name }}"
|
|
body=$(cat <<'BODY_EOF'
|
|
${{ steps.release-body.outputs.body }}
|
|
BODY_EOF
|
|
)
|
|
data=$(jq -n \
|
|
--arg tag "$tag" \
|
|
--arg repo "$repo" \
|
|
--arg body "$body" \
|
|
'{event_type: "trigger-from-release", client_payload: {tag: $tag, repo: $repo, body: $body}}')
|
|
echo "Dispatching tag $tag from $repo"
|
|
echo "Data: $data"
|
|
curl -X POST \
|
|
-H "Accept: application/vnd.github+json" \
|
|
-H "Authorization: Bearer $GH_TOKEN" \
|
|
https://api.github.com/repos/chenasraf/homebrew-tap/dispatches \
|
|
-d "$data"
|
|
echo "Dispatched tag $tag from $repo"
|
|
echo "Created job on https://github.com/chenasraf/homebrew-tap/actions"
|