-
Notifications
You must be signed in to change notification settings - Fork 3
130 lines (114 loc) · 4.11 KB
/
release.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# only run this workflow on the main branch.
# when a tag is pushed this workflow will create a release draft and upload the build artifacts
# to the release draft
name: Release
run-name: ${{ github.ref_name }} release run 🚀
on:
push:
branches:
- main
tags:
- '*'
permissions:
contents: write
concurrency:
group: '${{ github.workflow }} @ ${{ github.ref }}'
cancel-in-progress: ${{ github.ref_type == 'tag' }}
jobs:
build-project:
name: Build Project 🧱
uses: ./.github/workflows/build.yaml
secrets: inherit
permissions:
contents: read
create-release:
name: Create Release 🛫
if: github.ref_type == 'tag'
runs-on: ubuntu-22.04
needs: build-project
defaults:
run:
shell: bash
steps:
- name: Check Release Tag ☑️
id: check
run: |
: Check Release Tag ☑️
if [[ "${RUNNER_DEBUG}" ]]; then set -x; fi
shopt -s extglob
case "${GITHUB_REF_NAME}" in
+([0-9]).+([0-9]).+([0-9]) )
echo 'validTag=true' >> $GITHUB_OUTPUT
echo 'prerelease=false' >> $GITHUB_OUTPUT
echo "version=${GITHUB_REF_NAME}" >> $GITHUB_OUTPUT
;;
+([0-9]).+([0-9]).+([0-9])-@(beta|rc)*([0-9]) )
echo 'validTag=true' >> $GITHUB_OUTPUT
echo 'prerelease=true' >> $GITHUB_OUTPUT
echo "version=${GITHUB_REF_NAME}" >> $GITHUB_OUTPUT
;;
*) echo 'validTag=false' >> $GITHUB_OUTPUT ;;
esac
- name: Download Build Artifacts 📥
uses: actions/download-artifact@v4
if: fromJSON(steps.check.outputs.validTag)
id: download
- name: Print downloaded artifacts 📥
if: fromJSON(steps.check.outputs.validTag)
run: |
: Print downloaded artifacts 📥
if [[ "${RUNNER_DEBUG}" ]]; then set -x; fi
shopt -s extglob
ls -laR ${{ steps.download.outputs.artifacts }}
- name: Rename Files 🏷️
if: fromJSON(steps.check.outputs.validTag)
run: |
: Rename Files 🏷️
if [[ "${RUNNER_DEBUG}" ]]; then set -x; fi
shopt -s extglob
shopt -s nullglob
commit_hash="${GITHUB_SHA:0:9}"
variants=(
'linux'
'macos-x86'
'macos-arm64'
'windows'
)
mkdir -p "${{ github.workspace }}/uploads"
for variant in "${variants[@]}"; do
candidates=(*-${variant}/@(*))
for candidate in "${candidates[@]}"; do
cp "${candidate}" "${{ github.workspace }}/uploads/note-taker-${variant}-${GITHUB_REF_NAME}.${candidate##*.}"
done
done
- name: Upload Release Artifacts 📤
if: fromJSON(steps.check.outputs.validTag)
uses: actions/upload-artifact@v4
with:
name: note-taker-${GITHUB_REF_NAME}
path: uploads
- name: Generate Checksums 🪪
if: fromJSON(steps.check.outputs.validTag)
run: |
: Generate Checksums 🪪
if [[ "${RUNNER_DEBUG}" ]]; then set -x; fi
shopt -s extglob
echo "### Checksums" > ${{ github.workspace }}/CHECKSUMS.txt
# find the files from the above step and generate checksums
for file in ${{ github.workspace }}/uploads/note-taker-*; do
echo " ${file##*/}: $(sha256sum "${file}" | cut -d " " -f 1)" >> ${{ github.workspace }}/CHECKSUMS.txt
done
- name: Create Release 🛫
if: fromJSON(steps.check.outputs.validTag)
id: create_release
uses: softprops/action-gh-release@v2
with:
draft: true
name: Locaal Note Taker v${{ steps.check.outputs.version }}
generate_release_notes: true
body_path: ${{ github.workspace }}/CHECKSUMS.txt
files: |
${{ github.workspace }}/uploads/note-taker-*.zip
${{ github.workspace }}/uploads/note-taker-*.exe
${{ github.workspace }}/uploads/note-taker-*.dmg
${{ github.workspace }}/uploads/note-taker-*.tar