Skip to content

ci: Import from actions-sync, check carefully (#374) #2220

ci: Import from actions-sync, check carefully (#374)

ci: Import from actions-sync, check carefully (#374) #2220

Workflow file for this run

# 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@f-readme-tweak 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 }}
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 }}