Skip to content

Release version 3.1.11 #202

Release version 3.1.11

Release version 3.1.11 #202

# Workflow triggered when we have a new release candidate
# This action is adapted from https://github.com/t4d-gmbh/stubbed_versioning
name: On Label rebuild vignettes
on:
pull_request:
types: [ labeled ]
env:
LABEL_CHECK: 'CompVignettes::build'
LABEL_SUCCESS: 'CompVignettes::passed'
LABEL_FAILURE: 'CompVignettes::failed'
DOC_LOC: "./docs"
BRANCH: ${{ github.head_ref || github.ref_name }}
jobs:
set_target:
if: ${{ github.event.label.name == 'CompVignettes::build' }}
runs-on: ubuntu-latest
outputs:
label: ${{ steps.set_label.outputs.label }}
steps:
- id: set_label
run: |
echo "label=${{ env.LABEL_CHECK }}" >> "$GITHUB_OUTPUT"
check_label_exist:
needs:
- set_target
runs-on: ubuntu-latest
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
OWNER: ${{ github.repository_owner }}
REPO: ${{ github.event.repository.name }}
permissions:
pull-requests: write
contents: write
steps:
- name: Assert labels ${{ env.LABEL_CHECK }} is defined
run: |
gh label create ${{ env.LABEL_CHECK }} --repo ${{ env.OWNER }}/${{ env.REPO }}
continue-on-error: true # make sure the next steps run also on failure
- name: Assert labels ${{ env.LABEL_SUCCESS }} is defined
run: |
gh label create ${{ env.LABEL_SUCCESS }} --repo ${{ env.OWNER }}/${{ env.REPO }}
continue-on-error: true # make sure the next steps run also on failure
- name: Assert labels ${{ env.LABEL_FAILURE }} is defined
run: |
gh label create ${{ env.LABEL_FAILURE }} --repo ${{ env.OWNER }}/${{ env.REPO }}
continue-on-error: true # make sure the next steps run also on failure
vignette_build:
runs-on: ubuntu-latest
needs:
- set_target
container:
image: ${{ vars.CONTAINER_SOURCE || 'ghcr.io/furrer-lab/r-containers' }}/${{ matrix.os }}/${{ matrix.compiler }}/${{ matrix.r-version }}/abn:${{ vars.CONTAINER_VERSION || 'latest' }}
env:
R_KEEP_PKG_SOURCE: yes # NOTE Jo: not sure why this is here?
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
EVENT: ${{ github.event.number }}
strategy:
fail-fast: false
matrix:
r-version: ['release']
os: ['debian']
compiler: ['gcc']
permissions:
contents: write
id-token: write
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Checkout branch of PR
run: |
apt-get update && apt-get install -y gh
git config --global --add safe.directory /__w/abn/abn
gh pr checkout ${{ env.EVENT }}
- name: Disable renv
run: |
renv::deactivate()
shell: Rscript {0}
- name: Configure ABN for installation
run: |
autoreconf
- name: Install package dependencies
run: |
devtools::install_deps(pkg = '.', dependencies = TRUE, upgrade='never')
shell: Rscript {0}
- name: Install ABN
run: |
R CMD INSTALL .
- name: Rebuild Vignettes
run: |
source("vignettes/precompile.R")
shell: Rscript {0}
- name: Copy Figures to Vignettes folder
run: |
mv ./*.png vignettes/
- uses: actions/upload-artifact@v4
with:
path: vignettes/
- name: Commit compiled vignettes to branch
run: |
git config --global user.name 'GitHub Vignette Bot'
git config --global user.email 'vignettebot@github.com'
git config --global --add safe.directory /__w/abn/abn
git add vignettes/
git add *.png
git commit -m "Automated Vignette Compilation"
git push
report_vignette_build:
if: ${{ (success() || failure()) }}
needs:
- vignette_build
- check_label_exist
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 }}
steps:
- uses: actions/checkout@v4
- name: Check if on demand tasks succeeded
run: |
gh pr edit ${{ env.EVENT }} --remove-label ${{ env.LABEL_CHECK }} --repo ${{ env.OWNER }}/${{ env.REPO }}
if [ ${{ needs.vignette_build.result }} == "success" ]; then
gh pr edit ${{ env.EVENT }} --remove-label ${{ env.LABEL_FAILURE }} --repo ${{ env.OWNER }}/${{ env.REPO }}
gh pr edit ${{ env.EVENT }} --add-label ${{ env.LABEL_SUCCESS }} --repo ${{ env.OWNER }}/${{ env.REPO }}
echo "### ${{ github.event.label.url }} passed! :rocket:" >> $GITHUB_STEP_SUMMARY
exit 0;
elif [ ${{ needs.vignette_build.result }} == "failure" ]; then
gh pr edit ${{ env.EVENT }} --remove-label ${{ env.LABEL_SUCCESS }} --repo ${{ env.OWNER }}/${{ env.REPO }}
gh pr edit ${{ env.EVENT }} --add-label ${{ env.LABEL_FAILURE }} --repo ${{ env.OWNER }}/${{ env.REPO }}
echo "### ${{ github.event.label.url }} failed!" >> $GITHUB_STEP_SUMMARY
exit 1;
else
gh pr edit ${{ env.EVENT }} --add-label ${{ env.LABEL_CHECK }} --repo ${{ env.OWNER }}/${{ env.REPO }}
echo "On demand task outcome was ${{ steps.some_task.outcome }}";
fi
shell: bash
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
EVENT: ${{ github.event.number }} # This is either the issue or pr
record_passed_label:
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
outputs:
passed: ${{ steps.passed.outputs.PASSED}}
steps:
- name: Check if the pull request is labeled with ${{ env.LABEL_SUCCESS }} # 2
id: passed
run: |
if $( gh pr view ${{ env.EVENT }} --repo ${{ env.OWNER }}/${{ env.REPO }} --json "labels" --jq ".[].[].name" | grep --quiet ${{ env.LABEL_SUCCESS }}); then
echo "PASSED=true" >> $GITHUB_OUTPUT;
else
echo "PASSED=false" >> $GITHUB_OUTPUT;
fi
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
EVENT: ${{ github.event.number }} # This is either the issue or pr
vignette_build_passed:
if: ${{ always() }}
needs:
- vignette_build
- record_passed_label
runs-on: ubuntu-latest
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
OWNER: ${{ github.repository_owner }}
REPO: ${{ github.event.repository.name }}
steps:
- name: Assert that either job passed or the label is present
run: |
# First, check if the workflow was triggered by the correct label.
# If not, the relevant jobs were likely skipped, and we should not fail the workflow.
if [[ "${{ github.event.label.name }}" != "${{ env.LABEL_CHECK }}" ]]; then
echo "Workflow not triggered by '${{ env.LABEL_CHECK }}' label (actual label: '${{ github.event.label.name }}')."
echo "Skipping status assertion and exiting gracefully."
exit 0
fi
# If triggered by the correct label, proceed with the status check.
vignette_build_RESULT="${{ needs.vignette_build.result }}"
PASSED_LABEL_EXISTS="${{ needs.record_passed_label.outputs.passed }}"
echo "Verifying R CMD check status..."
echo " - vignette_build job result: ${vignette_build_RESULT}"
echo " - '${{ env.LABEL_SUCCESS }}' label found on PR: ${PASSED_LABEL_EXISTS}"
if [[ "${vignette_build_RESULT}" == 'success' ]]; then
echo "=> Success: vignette_build job passed."
exit 0
elif [[ "${PASSED_LABEL_EXISTS}" == 'true' ]]; then
echo "=> Success: Although vignette_build job result was '${vignette_build_RESULT}', the '${{ env.LABEL_SUCCESS }}' label already exists on the PR."
exit 0
else
echo "=> Failure: vignette_build job result was '${vignette_build_RESULT}' and the '${{ env.LABEL_SUCCESS }}' label was not found."
exit 1
fi