new automated tests

This commit is contained in:
Daniel Winkler 2026-05-24 00:27:46 +10:00
commit 2a521eeabd
7 changed files with 162 additions and 23 deletions

View file

@ -1,20 +1,6 @@
name: "Test RDE template" name: "Test RDE template"
on: on:
workflow_dispatch: # allows manual triggering workflow_dispatch: # allows manual triggering
push:
paths:
- 'templates/rde/flake.lock'
- 'templates/rde/**/*.nix'
- 'templates/rde/**/*.sh'
- 'templates/rde/**/*.lua'
- '.github/workflows/check.yml'
pull_request:
paths:
- 'templates/rde/flake.lock'
- 'templates/rde/**/*.nix'
- 'templates/rde/**/*.sh'
- 'templates/rde/**/*.lua'
- '.github/workflows/check.yml'
concurrency: concurrency:
group: ${{ github.workflow }}-${{ github.ref }} group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true cancel-in-progress: true

View file

@ -1,9 +1,16 @@
name: "Test ed template MacOS" name: "Test ed template"
on: on:
workflow_dispatch: # allows manual triggering workflow_dispatch:
push: push:
branches: paths:
- 'update_rde' - 'templates/ed/**'
- 'tests/ed/**'
- '.github/workflows/check_ed.yml'
pull_request:
paths:
- 'templates/ed/**'
- 'tests/ed/**'
- '.github/workflows/check_ed.yml'
concurrency: concurrency:
group: ${{ github.workflow }}-${{ github.ref }} group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true cancel-in-progress: true
@ -12,7 +19,7 @@ jobs:
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
strategy: strategy:
matrix: matrix:
os: [macos-latest, ubuntu-latest] os: [ubuntu-latest]
steps: steps:
- uses: actions/checkout@v6 - uses: actions/checkout@v6
- uses: cachix/install-nix-action@v31 - uses: cachix/install-nix-action@v31
@ -23,4 +30,86 @@ jobs:
name: rde name: rde
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
extraPullNames: rstats-on-nix, nix-community extraPullNames: rstats-on-nix, nix-community
- run: nix build ./templates/ed
- name: Build template
run: nix build ./templates/ed
- name: Test R script
run: |
cd templates/ed
nix develop --command nu -c "Rscript ${{ github.workspace }}/tests/ed/test.R"
- name: Test Python script (disabled by default)
run: |
cd templates/ed
nix develop --command nu -c "python3 ${{ github.workspace }}/tests/ed/test.py" || echo "SKIP: Python packages not enabled"
test-with-python:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: cachix/install-nix-action@v31
with:
github_access_token: ${{ secrets.GITHUB_TOKEN }}
- uses: cachix/cachix-action@v17
with:
name: rde
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
extraPullNames: rstats-on-nix, nix-community
- name: Setup test directory with Python enabled
run: |
TEST_DIR=$(mktemp -d)
cp -r templates/ed/. "$TEST_DIR/"
cd "$TEST_DIR"
sed -i 's/python[[:space:]]*=[[:space:]]*false;/python = true;/' flake.nix
grep -q "python[[:space:]]*=[[:space:]]*true;" flake.nix || {
echo "Error: Failed to enable Python in flake.nix"
exit 1
}
echo "TEST_DIR=$TEST_DIR" >> $GITHUB_ENV
- name: Build with Python enabled
run: |
cd "$TEST_DIR"
nix build
- name: Test Python packages
run: |
cd "$TEST_DIR"
nix develop --command nu -c "python3 ${{ github.workspace }}/tests/ed/test.py"
test-with-julia:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: cachix/install-nix-action@v31
with:
github_access_token: ${{ secrets.GITHUB_TOKEN }}
- uses: cachix/cachix-action@v17
with:
name: rde
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
extraPullNames: rstats-on-nix, nix-community
- name: Setup test directory with Julia enabled
run: |
TEST_DIR=$(mktemp -d)
cp -r templates/ed/. "$TEST_DIR/"
cd "$TEST_DIR"
sed -i 's/julia[[:space:]]*=[[:space:]]*false;/julia = true;/' flake.nix
grep -q "julia[[:space:]]*=[[:space:]]*true;" flake.nix || {
echo "Error: Failed to enable Julia in flake.nix"
exit 1
}
echo "TEST_DIR=$TEST_DIR" >> $GITHUB_ENV
- name: Build with Julia enabled
run: |
cd "$TEST_DIR"
nix build
- name: Test Julia packages
run: |
cd "$TEST_DIR"
nix develop --command nu -c "julia ${{ github.workspace }}/tests/ed/test.jl"

View file

@ -3,7 +3,7 @@ on:
workflow_dispatch: # allows manual triggering workflow_dispatch: # allows manual triggering
push: push:
branches: branches:
- 'update_rde' - 'update_ed'
concurrency: concurrency:
group: ${{ github.workflow }}-${{ github.ref }} group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true cancel-in-progress: true
@ -23,5 +23,4 @@ jobs:
name: rde name: rde
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
extraPullNames: rstats-on-nix, nix-community extraPullNames: rstats-on-nix, nix-community
- run: nix build ./templates/rde
- run: nix build ./templates/ed - run: nix build ./templates/ed

View file

@ -26,7 +26,7 @@ jobs:
uses: DeterminateSystems/update-flake-lock@v28 uses: DeterminateSystems/update-flake-lock@v28
with: with:
token: ${{ secrets.GH_TOKEN_FOR_UPDATES }} token: ${{ secrets.GH_TOKEN_FOR_UPDATES }}
branch: update_rde branch: update_ed
path-to-flake-dir: "templates/ed" path-to-flake-dir: "templates/ed"
pr-title: "Update RDE flake.lock" # Title of PR to be created pr-title: "Update RDE flake.lock" # Title of PR to be created
pr-labels: | # Labels to be set on the PR pr-labels: | # Labels to be set on the PR

29
tests/ed/test.R Executable file
View file

@ -0,0 +1,29 @@
#!/usr/bin/env Rscript
packages <- c("arrow", "data.table", "fixest", "nvimcom")
failed <- character(0)
for (pkg in packages) {
ok <- tryCatch(
{
# nvimcom requires Neovim; skip loading but check it's installed
if (pkg == "nvimcom") {
requireNamespace(pkg, quietly = TRUE)
} else {
library(pkg, character.only = TRUE, quietly = TRUE)
}
TRUE
},
error = function(e) FALSE
)
if (!ok) {
failed <- c(failed, pkg)
}
}
if (length(failed) > 0) {
cat(sprintf("FAIL: %s\n", paste(failed, collapse = ", ")))
quit(status = 1)
}
cat("PASS: all packages loaded\n")

19
tests/ed/test.jl Executable file
View file

@ -0,0 +1,19 @@
#!/usr/bin/env julia
packages = ["StatsBase"]
failed = String[]
for pkg in packages
try
@eval using $pkg
catch
push!(failed, pkg)
end
end
if !isempty(failed)
@error "FAIL: $(join(failed, ", "))"
exit(1)
end
println("PASS: all packages loaded")

17
tests/ed/test.py Executable file
View file

@ -0,0 +1,17 @@
#!/usr/bin/env python3
import sys
packages = ["requests"]
failed = []
for pkg in packages:
try:
__import__(pkg)
except ImportError:
failed.append(pkg)
if failed:
sys.stderr.write(f"FAIL: {', '.join(failed)}\n")
sys.exit(1)
print("PASS: all packages loaded")