Feature-Format Tests #323
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
# Tests all documents in the feature-format matrix | |
name: Feature-Format Tests | |
on: | |
workflow_dispatch: | |
schedule: | |
# run daily at 1am UTC | |
- cron: "0 1 * * *" | |
# Deactivating run on commits for now | |
## push: | |
## branches: [main] | |
## paths-ignore: | |
## - "news/**" | |
## - "src/resources/language/**" | |
## pull_request: | |
## branches: [main] | |
## paths-ignore: | |
## - "src/resources/language/**" | |
concurrency: | |
# Use github.run_id on main branch | |
# Use github.event.pull_request.number on pull requests, so it's unique per pull request | |
# Use github.ref on other branches, so it's unique per branch | |
group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/main' && github.run_id || github.event.pull_request.number || github.ref }} | |
cancel-in-progress: true | |
jobs: | |
run-smokes: | |
name: Run feature-format matrix on (${{ matrix.os }}) | |
if: github.event_name != 'schedule' || (github.event_name == 'schedule' && github.repository == 'quarto-dev/quarto-cli') | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, windows-latest] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Checkout Repo | |
uses: actions/checkout@v4 | |
- name: Fix temp dir to use runner one (windows) | |
if: runner.os == 'Windows' | |
run: | | |
echo "TMPDIR=${{ runner.temp }}" >> $GITHUB_ENV | |
echo "TMP=${{ runner.temp }}" >> $GITHUB_ENV | |
echo "TEMP=${{ runner.temp }}" >> $GITHUB_ENV | |
shell: bash | |
- name: Set up R | |
uses: r-lib/actions/setup-r@v2 | |
with: | |
r-version: "4.4.2" | |
use-public-rspm: true | |
# required to avoid rtools bin in path | |
windows-path-include-rtools: false | |
- name: Install node (for Playwright, MECA) | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 16 | |
- name: Install node dependencies | |
if: ${{ runner.os != 'Windows' || github.event_name == 'schedule' }} | |
run: yarn | |
working-directory: ./tests/integration/playwright | |
shell: bash | |
- name: Install Playwright Browsers | |
if: ${{ runner.os != 'Windows' || github.event_name == 'schedule' }} | |
run: npx playwright install --with-deps | |
working-directory: ./tests/integration/playwright | |
- name: Install MECA validator | |
if: ${{ runner.os != 'Windows' }} | |
run: npm install -g meca | |
- name: Set RENV_PATHS_ROOT | |
shell: bash | |
run: | | |
echo "RENV_PATHS_ROOT=${{ runner.temp }}/renv" >> $GITHUB_ENV | |
- name: Get R and OS version | |
id: get-version | |
run: | | |
cat("os-version=", sessionInfo()$running, "\n", file = Sys.getenv("GITHUB_OUTPUT"), sep = "", append = TRUE) | |
cat("r-version=", R.Version()$version.string, "\n", file = Sys.getenv("GITHUB_OUTPUT"), sep = "", append = TRUE) | |
shell: Rscript {0} | |
- name: Cache R packages | |
uses: actions/cache@v4 | |
with: | |
path: ${{ env.RENV_PATHS_ROOT }} | |
key: ${{ steps.get-version.outputs.os-version }}-${{ steps.get-version.outputs.r-version }}-renv-2-${{ hashFiles('tests/renv.lock') }} | |
restore-keys: | | |
${{ steps.get-version.outputs.os-version }}-${{ steps.get-version.outputs.r-version }}-renv-2- | |
save-always: true | |
- name: Install missing system deps | |
if: runner.os == 'Linux' | |
run: | | |
sudo apt-get update -y | |
sudo apt-get install -y libcurl4-openssl-dev | |
sudo apt-get install -y libxml2-utils | |
sudo apt-get install -y libharfbuzz-dev libfribidi-dev | |
- name: Restore R packages | |
working-directory: tests | |
run: | | |
if (!requireNamespace('renv', quietly = TRUE)) install.packages('renv') | |
renv::restore() | |
# Install dev versions for our testing | |
# Use r-universe to avoid github api calls | |
try(install.packages('knitr', repos = 'https://yihui.r-universe.dev')) | |
try(install.packages('rmarkdown', repos = 'https://rstudio.r-universe.dev')) | |
shell: Rscript {0} | |
env: | |
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} | |
- name: Install uv for Python | |
uses: astral-sh/setup-uv@v3 | |
with: | |
version: "0.4.30" | |
enable-cache: true | |
cache-dependency-glob: "tests/uv.lock" | |
- name: Install Python and Dependencies | |
working-directory: tests | |
run: | | |
uv sync --frozen | |
- uses: ./.github/workflows/actions/quarto-dev | |
- name: Install Tinytex | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
quarto install tinytex | |
- name: Cache Typst packages | |
uses: ./.github/actions/cache-typst | |
# - name: Install Chrome | |
# uses: browser-actions/setup-chrome@v1 | |
# with: | |
# chrome-version: 127 | |
- name: Setup Julia | |
uses: julia-actions/setup-julia@v2 | |
with: | |
version: "1.10" | |
- name: Cache Julia Packages | |
uses: julia-actions/cache@v2 | |
- name: Restore Julia Packages | |
working-directory: tests | |
shell: bash | |
run: | | |
# Setup IJulia with the jupyter from the Python environment | |
# https://julialang.github.io/IJulia.jl/stable/manual/installation/ | |
export JUPYTER=$(find $(dirname $(uv run --frozen which jupyter))/ -type f -name "jupyter.exe" -o -name "jupyter") | |
uv run --frozen julia --color=yes --project=. -e "import Pkg; Pkg.instantiate(); Pkg.build(\"IJulia\"); Pkg.precompile()" | |
echo "Julia Jupyter:" | |
julia --project=. -e "import IJulia;println(IJulia.JUPYTER);println(IJulia.find_jupyter_subcommand(\"notebook\"))" | |
- name: Setup timing file for timed test | |
if: ${{ matrix.time-test == true }} | |
run: | | |
echo "QUARTO_TEST_TIMING=timing-for-ci.txt" >> "$GITHUB_ENV" | |
# - name: Setup tmate session | |
# uses: mxschmitt/action-tmate@v3 | |
# The Check Chromium step appears necessary to avoid a crash/hang when rendering PDFs | |
# https://github.com/quarto-dev/quarto-actions/issues/45#issuecomment-1562599451 | |
# Same fix as in quarto-actions/quarto-render | |
# chromium is installed in the ubuntu runners in GHA, so no need to install it | |
# - name: "Check Chromium" | |
# if: ${{ runner.os == 'Linux' }} | |
# run: | | |
# echo $(which google-chrome) | |
# $(which google-chrome) --headless --no-sandbox --disable-gpu --renderer-process-limit=1 https://www.chromestatus.com | |
# shell: bash | |
- name: Run all Smoke Tests Windows | |
if: ${{ runner.os == 'Windows' && format('{0}', inputs.buckets) == '' && matrix.time-test == false }} | |
env: | |
# Useful as TinyTeX latest release is checked in run-test.sh | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: ./run-tests.ps1 ../dev-docs/feature-format-matrix/qmd-files/**/*.qmd | |
working-directory: tests | |
shell: pwsh | |
- name: Run all Smoke Tests Linux | |
if: ${{ runner.os != 'Windows' && format('{0}', inputs.buckets) == '' }} | |
env: | |
# Useful as TinyTeX latest release is checked in run-test.sh | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: shopt -s globstar && ./run-tests.sh ../dev-docs/feature-format-matrix/**/*.qmd | |
working-directory: tests | |
shell: bash |