Skip to content

Commit 28171d1

Browse files
authored
Implement intial release workflow (#588)
* Implement intial release workflow * Try to run release on the PR * Fix / and machine versions * Remove release on PRs
1 parent 92854cb commit 28171d1

1 file changed

Lines changed: 107 additions & 0 deletions

File tree

.github/workflows/release.yml

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
name: Release
2+
3+
on:
4+
push:
5+
tags:
6+
- "v*"
7+
workflow_dispatch:
8+
inputs:
9+
tag:
10+
description: "Tag to release (e.g. v2.0.1)"
11+
required: true
12+
type: string
13+
14+
permissions:
15+
contents: write
16+
17+
jobs:
18+
build:
19+
name: Build (${{ matrix.platform }})
20+
runs-on: ${{ matrix.os }}
21+
strategy:
22+
fail-fast: false
23+
matrix:
24+
include:
25+
- os: ubuntu-latest
26+
platform: linux-x86_64
27+
- os: macos-latest
28+
platform: macos-x86_64
29+
30+
env:
31+
RELEASE_TAG: ${{ inputs.tag || github.ref_name }}
32+
33+
steps:
34+
- uses: actions/checkout@v4
35+
36+
- uses: haskell-actions/setup@v2
37+
id: setup-haskell
38+
name: Setup Haskell
39+
with:
40+
ghc-version: "9.12.2"
41+
cabal-version: "3.14"
42+
43+
- uses: actions/cache@v4
44+
name: Cache ~/.cabal/store
45+
with:
46+
path: ${{ steps.setup-haskell.outputs.cabal-store }}
47+
key: ${{ runner.os }}-ghc-9.12.2-${{ hashFiles('cabal.project', 'summoner-cli/summoner.cabal', 'summoner-tui/summoner-tui.cabal') }}
48+
49+
- name: Update package index
50+
run: cabal update
51+
52+
- name: Build executables
53+
run: |
54+
cabal build summoner:exe:summon summoner-tui:exe:summon-tui
55+
56+
- name: Package release archive
57+
id: package
58+
shell: bash
59+
run: |
60+
set -euo pipefail
61+
version="${RELEASE_TAG#v}"
62+
version="${version//\//-}"
63+
platform="${{ matrix.platform }}"
64+
outdir="release/${platform}"
65+
mkdir -p "${outdir}"
66+
echo "version=${version}" >> "${GITHUB_OUTPUT}"
67+
install -m 0755 "$(cabal list-bin summoner:exe:summon)" "${outdir}/summon"
68+
install -m 0755 "$(cabal list-bin summoner-tui:exe:summon-tui)" "${outdir}/summon-tui"
69+
tar -czf "summoner-${version}-${platform}.tar.gz" \
70+
-C "${outdir}" summon summon-tui \
71+
-C "${GITHUB_WORKSPACE}" LICENSE README.md
72+
73+
- uses: actions/upload-artifact@v4
74+
name: Upload artifacts
75+
with:
76+
name: release-${{ matrix.platform }}
77+
path: summoner-${{ steps.package.outputs.version }}-${{ matrix.platform }}.tar.gz
78+
79+
release:
80+
name: Publish release
81+
runs-on: ubuntu-22.04
82+
needs: build
83+
if: github.event_name != 'pull_request'
84+
env:
85+
RELEASE_TAG: ${{ inputs.tag || github.ref_name }}
86+
87+
steps:
88+
- name: Prepare release metadata
89+
id: vars
90+
shell: bash
91+
run: |
92+
set -euo pipefail
93+
version="${RELEASE_TAG#v}"
94+
version="${version//\//-}"
95+
echo "version=${version}" >> "${GITHUB_OUTPUT}"
96+
97+
- uses: actions/download-artifact@v4
98+
with:
99+
pattern: release-*
100+
merge-multiple: true
101+
102+
- uses: softprops/action-gh-release@v2
103+
with:
104+
tag_name: ${{ env.RELEASE_TAG }}
105+
generate_release_notes: true
106+
files: |
107+
summoner-${{ steps.vars.outputs.version }}-*.tar.gz

0 commit comments

Comments
 (0)