ci: Correctly detect branch protection (#1608) #2522
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 derived from https://github.com/r-lib/actions/tree/v2/examples | |
# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help | |
# | |
# NOTE: This workflow is overkill for most R packages and | |
# check-standard.yaml is likely a better choice. | |
# usethis::use_github_action("check-standard") will install it. | |
on: | |
push: | |
branches: | |
- main | |
- master | |
- release | |
- cran-* | |
pull_request: | |
branches: | |
- main | |
- master | |
workflow_dispatch: | |
inputs: | |
ref: | |
description: "Branch, tag, or commit to check out" | |
required: false | |
default: "main" | |
versions-matrix: | |
description: "Create a matrix of R versions" | |
type: boolean | |
default: false | |
dep-suggests-matrix: | |
description: "Create a matrix of suggested dependencies" | |
type: boolean | |
default: false | |
merge_group: | |
types: | |
- checks_requested | |
schedule: | |
- cron: "10 0 * * *" | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }}-${{ inputs.ref || github.head_ref || github.sha }}-${{ github.base_ref || '' }} | |
cancel-in-progress: true | |
name: rcc | |
jobs: | |
rcc-smoke: | |
runs-on: ubuntu-latest | |
outputs: | |
sha: ${{ steps.commit.outputs.sha }} | |
versions-matrix: ${{ steps.versions-matrix.outputs.matrix }} | |
dep-suggests-matrix: ${{ steps.dep-suggests-matrix.outputs.matrix }} | |
name: "Smoke test: stock R" | |
# Begin custom: services | |
# End custom: services | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ref: ${{ inputs.ref }} | |
- name: Update status for rcc | |
# FIXME: Wrap into action | |
if: github.event_name == 'workflow_dispatch' | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
# Check status of this workflow | |
state="pending" | |
sha=${{ inputs.ref }} | |
if [ -z "${sha}" ]; then | |
sha=${{ github.head_ref }} | |
fi | |
if [ -z "${sha}" ]; then | |
sha=${{ github.sha }} | |
fi | |
sha=$(git rev-parse ${sha}) | |
html_url=$(gh api \ | |
-H "Accept: application/vnd.github+json" \ | |
-H "X-GitHub-Api-Version: 2022-11-28" \ | |
repos/${{ github.repository }}/actions/runs/${{ github.run_id }} | jq -r .html_url) | |
description="${{ github.workflow }} / ${{ github.job }}" | |
gh api \ | |
--method POST \ | |
-H "Accept: application/vnd.github+json" \ | |
-H "X-GitHub-Api-Version: 2022-11-28" \ | |
repos/${{ github.repository }}/statuses/${sha} \ | |
-f "state=${state}" -f "target_url=${html_url}" -f "description=${description}" -f "context=rcc" | |
shell: bash | |
- uses: ./.github/workflows/rate-limit | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- uses: ./.github/workflows/git-identity | |
- uses: ./.github/workflows/custom/before-install | |
if: hashFiles('.github/workflows/custom/before-install/action.yml') != '' | |
- uses: ./.github/workflows/install | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
cache-version: rcc-smoke-2 | |
needs: check, website | |
# Beware of using dev pkgdown here, has brought in dev dependencies in the past | |
extra-packages: any::rcmdcheck r-lib/roxygen2 any::decor r-lib/styler r-lib/pkgdown deps::. | |
- name: Install package | |
run: | | |
_R_SHLIB_STRIP_=true R CMD INSTALL . | |
shell: bash | |
- uses: ./.github/workflows/custom/after-install | |
if: hashFiles('.github/workflows/custom/after-install/action.yml') != '' | |
- id: versions-matrix | |
# Only run for pull requests if the base repo is different from the head repo, not for workflow_dispatch if not requested, always run for other events | |
if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.repository) && (github.event_name != 'workflow_dispatch' || inputs.versions-matrix) | |
uses: ./.github/workflows/versions-matrix | |
- id: dep-suggests-matrix | |
# Not for workflow_dispatch if not requested, always run for other events | |
if: github.event_name != 'workflow_dispatch' || inputs.dep-suggests-matrix | |
uses: ./.github/workflows/dep-suggests-matrix | |
- uses: ./.github/workflows/update-snapshots | |
with: | |
base: ${{ inputs.ref || github.head_ref }} | |
- uses: ./.github/workflows/style | |
- uses: ./.github/workflows/roxygenize | |
- name: Remove config files from previous iteration | |
run: | | |
rm -f .github/dep-suggests-matrix.json .github/versions-matrix.json | |
shell: bash | |
- id: commit | |
uses: ./.github/workflows/commit | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- uses: ./.github/workflows/check | |
with: | |
results: ${{ runner.os }}-smoke-test | |
- uses: ./.github/workflows/pkgdown-build | |
if: github.event_name != 'push' | |
- uses: ./.github/workflows/pkgdown-deploy | |
if: github.event_name == 'push' | |
# Upload sha as artifact | |
- run: | | |
echo -n "${{ steps.commit.outputs.sha }}" > rcc-smoke-sha.txt | |
shell: bash | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: rcc-smoke-sha | |
path: rcc-smoke-sha.txt | |
- name: Update status for rcc | |
# FIXME: Wrap into action | |
if: always() && github.event_name == 'workflow_dispatch' | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
# Check status of this workflow | |
if [ "${{ job.status }}" == "success" ]; then | |
state="success" | |
else | |
state="failure" | |
fi | |
sha=${{ steps.commit.outputs.sha }} | |
if [ -z "${sha}" ]; then | |
sha=${{ inputs.ref }} | |
fi | |
if [ -z "${sha}" ]; then | |
sha=${{ github.head_ref }} | |
fi | |
if [ -z "${sha}" ]; then | |
sha=${{ github.sha }} | |
fi | |
sha=$(git rev-parse ${sha}) | |
html_url=$(gh api \ | |
-H "Accept: application/vnd.github+json" \ | |
-H "X-GitHub-Api-Version: 2022-11-28" \ | |
repos/${{ github.repository }}/actions/runs/${{ github.run_id }} | jq -r .html_url) | |
description="${{ github.workflow }} / ${{ github.job }}" | |
gh api \ | |
--method POST \ | |
-H "Accept: application/vnd.github+json" \ | |
-H "X-GitHub-Api-Version: 2022-11-28" \ | |
repos/${{ github.repository }}/statuses/${sha} \ | |
-f "state=${state}" -f "target_url=${html_url}" -f "description=${description}" -f "context=rcc" | |
shell: bash | |
rcc-smoke-check-matrix: | |
runs-on: ubuntu-latest | |
name: "Check matrix" | |
needs: | |
- rcc-smoke | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ref: ${{ needs.rcc-smoke.outputs.sha }} | |
- uses: ./.github/workflows/matrix-check | |
with: | |
matrix: ${{ needs.rcc-smoke.outputs.versions-matrix }} | |
- uses: ./.github/workflows/matrix-check | |
with: | |
matrix: ${{ needs.rcc-smoke.outputs.dep-suggests-matrix }} | |
rcc-full: | |
needs: | |
- rcc-smoke | |
runs-on: ${{ matrix.os }} | |
if: ${{ needs.rcc-smoke.outputs.versions-matrix != '' }} | |
name: 'rcc: ${{ matrix.os }} (${{ matrix.r }}) ${{ matrix.desc }}' | |
# Begin custom: services | |
# End custom: services | |
strategy: | |
fail-fast: false | |
matrix: ${{fromJson(needs.rcc-smoke.outputs.versions-matrix)}} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
ref: ${{ needs.rcc-smoke.outputs.sha }} | |
- uses: ./.github/workflows/custom/before-install | |
if: hashFiles('.github/workflows/custom/before-install/action.yml') != '' | |
- uses: ./.github/workflows/install | |
with: | |
r-version: ${{ matrix.r }} | |
cache-version: rcc-full-1 | |
token: ${{ secrets.GITHUB_TOKEN }} | |
needs: check | |
- uses: ./.github/workflows/custom/after-install | |
if: hashFiles('.github/workflows/custom/after-install/action.yml') != '' | |
- uses: ./.github/workflows/update-snapshots | |
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository | |
- uses: ./.github/workflows/check | |
with: | |
results: ${{ runner.os }}-r${{ matrix.r }} | |
# The status update is taken care of by R-CMD-check-status.yaml | |
rcc-suggests: | |
needs: | |
- rcc-smoke | |
runs-on: ubuntu-22.04 | |
if: ${{ needs.rcc-smoke.outputs.dep-suggests-matrix != '' }} | |
name: Without ${{ matrix.package }} | |
# Begin custom: services | |
# End custom: services | |
strategy: | |
fail-fast: false | |
matrix: ${{fromJson(needs.rcc-smoke.outputs.dep-suggests-matrix)}} | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: ./.github/workflows/custom/before-install | |
if: hashFiles('.github/workflows/custom/before-install/action.yml') != '' | |
- uses: ./.github/workflows/install | |
with: | |
install-r: false | |
cache-version: rcc-dev-${{ matrix.package }}-1 | |
needs: check | |
extra-packages: "any::rcmdcheck any::remotes ." | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Remove ${{ matrix.package }} and all strong dependencies | |
run: | | |
pkg <- "${{ matrix.package }}" | |
pkgs <- tools::package_dependencies(pkg, reverse = TRUE)[[1]] | |
installed <- rownames(utils::installed.packages()) | |
to_remove <- c(pkg, intersect(pkgs, installed)) | |
print(to_remove) | |
remove.packages(to_remove) | |
shell: Rscript {0} | |
- name: Session info | |
run: | | |
options(width = 100) | |
if (!requireNamespace("sessioninfo", quietly = TRUE)) install.packages("sessioninfo") | |
pkgs <- installed.packages()[, "Package"] | |
sessioninfo::session_info(pkgs, include_base = TRUE) | |
shell: Rscript {0} | |
- uses: ./.github/workflows/custom/after-install | |
if: hashFiles('.github/workflows/custom/after-install/action.yml') != '' | |
- name: Define _R_CHECK_FORCE_SUGGESTS_ | |
run: | | |
cat('_R_CHECK_FORCE_SUGGESTS_=false\n', file = Sys.getenv("GITHUB_ENV"), append = TRUE) | |
shell: Rscript {0} | |
- name: Must allow NOTEs, even with _R_CHECK_FORCE_SUGGESTS_ | |
run: | | |
if (Sys.getenv("RCMDCHECK_ERROR_ON") %in% c("", "note")) { | |
cat('RCMDCHECK_ERROR_ON="warning"\n', file = Sys.getenv("GITHUB_ENV"), append = TRUE) | |
} | |
shell: Rscript {0} | |
- name: Check env vars | |
run: | | |
print(Sys.getenv('_R_CHECK_FORCE_SUGGESTS_')) | |
print(Sys.getenv('RCMDCHECK_ERROR_ON')) | |
shell: Rscript {0} | |
- uses: ./.github/workflows/check | |
with: | |
results: ${{ matrix.package }} | |
# The status update is taken care of by R-CMD-check-status.yaml |