-
Notifications
You must be signed in to change notification settings - Fork 17
101 lines (89 loc) · 3.41 KB
/
release.yml
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
name: Release Piper Action
on:
workflow_dispatch: # trigger release manually
schedule:
- cron: '0 9 * * 1' # at 9 am every Monday
jobs:
check_if_should_run:
name: Check if should run
runs-on: ubuntu-latest
outputs:
should_run: ${{ steps.should_run.outputs.should_run || steps.manual_trigger.outputs.should_run }}
steps:
- uses: actions/checkout@v4
- name: Get tags
run: git fetch --tags --prune --unshallow
- name: Get latest release tag
id: latest_tag
run: echo "latest_release_tag=$(git describe --tags --abbrev=0)" >> "$GITHUB_OUTPUT"
# For scheduled runs check if there has been a commit since last release
- id: should_run
if: ${{ github.event_name == 'schedule' }}
name: Check latest commits
run: |
if [[ -n $(git log ${{ steps.latest_tag.outputs.latest_release_tag }}..HEAD --format=%H --max-count=5) ]]
then
echo "should_run=true" >> "$GITHUB_OUTPUT"
else
echo "No commits since last release. Release will be skipped"
fi
# For manual release trigger. Release will be created even if there has been no commits since last release
- id: manual_trigger
if: ${{ github.event_name == 'workflow_dispatch' }}
run: echo "should_run=true" >> "$GITHUB_OUTPUT"
release:
name: Release
needs: check_if_should_run
if: ${{ needs.check_if_should_run.outputs.should_run == 'true' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Increment version
id: version
uses: reecetech/version-increment@2024.4.4
with:
scheme: semver
increment: minor
- name: Create release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.version.outputs.v-version }}
generate_release_notes: true
make_latest: true
post:
name: Post Action
runs-on: ubuntu-latest
needs: [release]
if: always()
steps:
# Check status of the worklfow
- uses: martialonline/workflow-status@v4
id: check
# This step expects base64 encoded JSON object as below:
# {
# "smtp_url": "smtp+starttls://user:password@server:port",
# "smtp_mail_from": "from@mail.example",
# "smtp_mail_rcpt": "to@mail.example",
# }
- name: Decode SMTP secrets and set them in GITHUB_ENV
id: smtp_secrets
if: steps.check.outputs.status == 'failure' || steps.check.outputs.status == 'cancelled'
run: >
echo "${{ secrets.SMTP_CONFIG }}" |
base64 --decode |
jq -r 'to_entries[] | "\(.key)=\(.value)"' |
while read line; do
echo "$line" >> $GITHUB_ENV; echo "::add-mask::${line#*=}";
done
- name: Notify Piper team on failure or cancelled
if: steps.smtp_secrets.conclusion == 'success'
uses: dawidd6/action-send-mail@v3
with:
connection_url: ${{ env.smtp_url }}
subject: Workflow failure in ${{ github.repository }}
priority: high
to: ${{ env.smtp_mail_rcpt }}
from: Piper on GitHub <${{ env.smtp_mail_from }}>
body: |
Workflow '${{ github.workflow }}' has a job with status '${{ steps.check.outputs.status }}'.
Workflow link: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}