-
Notifications
You must be signed in to change notification settings - Fork 0
117 lines (113 loc) · 4.86 KB
/
publish_version.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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# Workflow triggered when we have a new release candidate
# This action is adapted from https://github.com/t4d-gmbh/stubbed_versioning
name: Publish a version
on:
pull_request:
types:
- closed
env:
LABEL_PUBLISHED: 'release::published'
jobs:
build-release-content:
if: ${{ github.event.pull_request.merged && startsWith(github.head_ref, 'release-') }}
runs-on: ubuntu-latest
container:
image: ${{ vars.CONTAINER_SOURCE }}/debian/gcc/release/abn:latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- name: Create build location
run: |
mkdir ${{ env.BUILD_LOC }}
shell: bash
- name: Disable renv
run: |
renv::deactivate()
shell: Rscript {0}
- name: Change permissions of configure
run: |
chmod +x configure
shell: bash
- name: Build the package
run: |
devtools::build(pkg = '.', path = '${{ env.BUILD_LOC }}/abn.tar.gz')
shell: Rscript {0}
# TODO: add abn.tar.gz as artifact
release-version:
needs: build-release-content
if: ${{ github.event.pull_request.merged && startsWith(github.head_ref, 'release-') }}
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
repository-projects: write
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
OWNER: ${{ github.repository_owner }}
REPO: ${{ github.event.repository.name }}
EVENT: ${{ github.event.number }} # This is either the issue or pr
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
# check if the pr is labeled as published already
- name: Check if the pull request is labeled with ${{ env.LABEL_PUBLISHED }}
id: published
run: |
if $( gh pr view ${{ env.EVENT }} --repo ${{ env.OWNER }}/${{ env.REPO }} --json "labels" --jq ".[].[].name" | grep --quiet ${{ env.LABEL_PUBLISHED }}); then
echo "LABELED=true" >> $GITHUB_OUTPUT
else
echo "LABELED=false" >> $GITHUB_OUTPUT
fi
- name: Attempt to create label ${{ env.LABEL_PUBLISHED }}
if: ${{ steps.published.outputs.labeled == 'false' }}
run: |
gh label create ${{ env.LABEL_PUBLISHED }} --repo ${{ env.OWNER }}/${{ env.REPO }}
continue-on-error: true # make sure the next steps run also on failure
- name: Get the version to release
if: ${{ steps.published.outputs.labeled == 'false' }}
id: release_version
run: |
git fetch --filter=tree:0 origin +refs/tags/*:refs/tags/*
echo "VERSION=$(echo ${{ github.head_ref }}|grep -Eo '[0-9]+.[0-9]+.[0-9]+')" >> $GITHUB_OUTPUT
echo "PREVIOUS_VERSION=`echo $(git tag --list | grep -E '[0-9]+.[0-9]+.[0-9]+$' | tail -n1)`" >> $GITHUB_OUTPUT
- name: Remove previous releases of the target tag, if existing
if: ${{ steps.published.outputs.labeled == 'false' }}
run: |
if script -q -e -c "gh release view ${{ steps.release_version.outputs.version }}"; then
# removing previous release along with associated tag
gh release delete ${{ steps.release_version.outputs.version }} \
--cleanup-tag -y \
--repo ${{ env.OWNER }}/${{ env.REPO }}
else
# non-exist
echo "No trace of a previous release."
fi
- name: Prepare Release note
if: ${{ steps.published.outputs.labeled == 'false' }}
# this gets the first the changes to the previous clean tag (including manual edits)
run: |
awk '/<a name="${{ steps.release_version.outputs.version }}".*/{a=1};a;/<a name="${{ steps.release_version.outputs.previous_version }}"*/{exit}' CHANGELOG.md | head -n -1 >> body.md
- name: Create tag and release
if: ${{ steps.published.outputs.labeled == 'false' }}
run: |
gh release create ${{ steps.release_version.outputs.version }} \
--target ${{ github.event.pull_request.head.sha }} \
--latest \
--title "${{ steps.release_version.outputs.version }}" \
--notes-file body.md \
--repo ${{ env.OWNER }}/${{ env.REPO }}
- name: Adding the label ${{ env.LABEL_PUBLISHED }}
if: ${{ steps.published.outputs.labeled == 'false' }}
run: |
gh pr edit ${{ env.EVENT }} --add-label ${{ env.LABEL_PUBLISHED }} --repo ${{ env.OWNER }}/${{ env.REPO }}
shell: bash
# TODO: get artifact from previous job and add it to the release
# - name: Upload additional artifacts to the release
# run: |
# gh release upload ${{ steps.release_version.outputs.version }} \
# some_file.md \
# other_file.md \
# --clobber
# --repo ${{ env.OWNER }}/${{ env.REPO }}