Release version 3.1.3 #283
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Workflow triggered when we have a new release candidate | |
# This action is adapted from https://github.com/t4d-gmbh/stubbed_versioning | |
name: On Label memory checking | |
on: | |
pull_request: | |
types: [ labeled ] | |
env: | |
LABEL_CHECK: 'memory::check' | |
LABEL_SUCCESS: 'memory::passed' | |
LABEL_FAILURE: 'memory::failed' | |
jobs: | |
set_target: | |
if: ${{ github.event.label.name == 'memory::check' }} | |
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 | |
gather_tests: | |
needs: | |
- set_target | |
runs-on: ubuntu-latest | |
outputs: | |
testfiles: ${{ steps.get_testfiles.outputs.testfiles }} | |
steps: | |
- uses: actions/checkout@v4 | |
- id: get_testfiles | |
run: | | |
echo "TESTFILES=$(ls tests/testthat/test-*.R | jq -R -s -c 'split("\n")[:-1]'))" >> $GITHUB_OUTPUT | |
run_memory_check: | |
needs: | |
- gather_tests | |
runs-on: ubuntu-latest | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
OWNER: ${{ github.repository_owner }} | |
REPO: ${{ github.event.repository.name }} | |
strategy: | |
fail-fast: false | |
matrix: | |
testfile: ${{ fromJson(needs.gather_tests.outputs.testfiles) }} | |
container: | |
image: ${{ vars.CONTAINER_SOURCE }}/${{ vars.CONTAINER_RELEASE || 'debian/gcc/release' }}/abn:${{ vars.CONTAINER_VERSION || 'latest' }} | |
credentials: | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
steps: | |
- name: Installing valgrind | |
run: | | |
apt-get install valgrind -y | |
shell: bash | |
- uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.head_ref }} | |
- name: Disable renv | |
run: | | |
renv::deactivate() | |
shell: Rscript {0} | |
- name: Change permissions of configure | |
run: | | |
chmod +x configure | |
shell: bash | |
- name: Install package dependencies | |
run: | | |
devtools::install_deps(pkg = '.', dependencies = TRUE, upgrade='never') | |
shell: Rscript {0} | |
- name: Configuration for valgrind (and ASan) | |
run: | | |
echo "PKG_CFLAGS = -g -fsanitize=address -fno-omit-frame-pointer" >> src/Makevars | |
echo "PKG_CXXFLAGS = -g -fsanitize=address -fno-omit-frame-pointer" >> src/Makevars | |
shell: bash | |
- name: Install package | |
run: | | |
devtools::install(upgrade='never') | |
shell: Rscript {0} | |
- name: valgrind - memcheck for ${{ matrix.testfile }} | |
run: | | |
R -d "valgrind --tool=memcheck \ | |
--leak-check=full \ | |
--errors-for-leak-kinds=definite \ | |
--track-origins=yes \ | |
--error-exitcode=1" \ | |
--vanilla \ | |
-e "devtools::test_active_file('${{ matrix.testfile }}')" | |
shell: bash | |
report_memory_checks: | |
if: ${{ (success() || failure()) }} | |
needs: | |
- run_memory_check | |
- 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.run_memory_check.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.run_memory_check.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 | |
memory_check_passed: | |
if: ${{ always() }} | |
needs: | |
- run_memory_check | |
- 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 checks passed on the label is present | |
run: | | |
if [[ ${{ needs.run_memory_check.result }} == 'success' || ${{ needs.record_passed_label.outputs.passed }} == 'true' ]]; then | |
echo 'memory checks status ok'; | |
else exit 1; fi |