Skip to content

Release version 3.1.2 #29

Release version 3.1.2

Release version 3.1.2 #29

# 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'
BUILD_LOC: "./build"
DOC_LOC: "./docs"
jobs:
associated_pr:
if: ${{ github.event.pull_request.merged && startsWith(github.head_ref, 'release-') }}
runs-on: ubuntu-latest
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
OWNER: ${{ github.repository_owner }}
REPO: ${{ github.event.repository.name }}
permissions:
pull-requests: read
repository-projects: read
outputs:
published: ${{ steps.published.outputs.labeled }}
event: ${{ github.event.number }}
steps:
- name: Check if the pull request is labeled with ${{ env.LABEL_PUBLISHED }}
id: published
run: |
if $( gh pr view ${{ github.event.number }} --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
# NOTE: creating a step to check if the label is in the list of labels rather than failing below step
- 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
build-release-content:
if: ${{ (needs.associated_pr.outputs.published == 'false') }}
needs:
- associated_pr
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}
- name: Upload the built package as artifact
uses: actions/upload-artifact@v4
with:
name: package
path: ${{ env.BUILD_LOC }}/abn.tar.gz
build-pkgdown-content:
if: ${{ (needs.associated_pr.outputs.published == 'false') }}
needs:
- associated_pr
runs-on: ubuntu-latest
# Only restrict concurrency for non-PR jobs
concurrency:
group: pkgdown-${{ github.event_name != 'pull_request' || github.run_id }}
env:
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
permissions:
contents: write
id-token: write
pages: write
steps:
- uses: actions/checkout@v4
- uses: r-lib/actions/setup-pandoc@v2
- uses: r-lib/actions/setup-r@v2
with:
use-public-rspm: true
- uses: r-lib/actions/setup-r-dependencies@v2
with:
extra-packages: any::pkgdown, local::.
needs: website
- name: Build site
run: |
pkgdown::build_site_github_pages(dest_dir= "${{ env.DOC_LOC }}", new_process = FALSE, install = FALSE)
shell: Rscript {0}
- name: Setup Pages
uses: actions/configure-pages@v3
- name: Upload pkgdown artifact
uses: actions/upload-pages-artifact@v2
with:
path: ${{ env.DOC_LOC }}/
release-version:
needs:
- associated_pr
- build-release-content
- build-pkgdown-content
runs-on: ubuntu-latest
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
OWNER: ${{ github.repository_owner }}
REPO: ${{ github.event.repository.name }}
permissions:
contents: write
pull-requests: write
repository-projects: write
pages: write
id-token: write
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Get the version to release
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 --sort=version:refname | 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 }} --repo ${{ env.OWNER }}/${{ env.REPO }}"; 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
# this gets the first the changes to the previous clean tag (including manual edits)
run: |
awk '/# abn ${{ steps.release_version.outputs.version }}*/{a=1};a;/# abn ${{ steps.release_version.outputs.previous_version }}*/{exit}' NEWS.md | head -n -1 >> body.md
- name: Create tag and release
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: Get the built package
uses: actions/download-artifact@v4
with:
name:
package
- name: Upload additional artifacts to the release
run: |
gh release upload ${{ steps.release_version.outputs.version }} \
./abn.tar.gz \
--clobber \
--repo ${{ env.OWNER }}/${{ env.REPO }}
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v2
- name: Adding the label ${{ env.LABEL_PUBLISHED }}
run: |
gh pr edit ${{ needs.associated_pr.outputs.event }} --add-label ${{ env.LABEL_PUBLISHED }} --repo ${{ env.OWNER }}/${{ env.REPO }}
shell: bash