From 908fc10ed9abbd702a3d5f8a5bb8ad51799757e5 Mon Sep 17 00:00:00 2001 From: martonvago Date: Mon, 25 Aug 2025 11:22:58 +0100 Subject: [PATCH] refactor: :recycle: move copier test to own file --- justfile | 59 +++------------------------------- test-template.sh | 82 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+), 55 deletions(-) create mode 100644 test-template.sh diff --git a/justfile b/justfile index 21924a5..a149c73 100644 --- a/justfile +++ b/justfile @@ -3,7 +3,7 @@ @_checks: check-spelling check-commits # Test Seedcase and non-Seedcase projects -@_tests: (test "true") (test "false") +@_tests: (test "true" "netlify") (test "false" "netlify") (test "true" "gh-pages") (test "false" "gh-pages") @_builds: build-contributors build-website build-readme # Run all build-related recipes in the justfile @@ -47,60 +47,9 @@ check-commits: check-spelling: uvx typos -# Test and check that a Python package can be created from the template -test is_seedcase_project: - #!/usr/bin/env bash - test_name="test-python-package" - test_dir="$(pwd)/_temp/{{ is_seedcase_project }}/$test_name" - template_dir="$(pwd)" - commit=$(git rev-parse HEAD) - rm -rf $test_dir - # vcs-ref means the current commit/head, not a tag. - uvx copier copy $template_dir $test_dir \ - --vcs-ref=$commit \ - --defaults \ - --trust \ - --data package_github_repo="first-last/repo" \ - --data is_seedcase_project={{ is_seedcase_project }} \ - --data author_given_name="First" \ - --data author_family_name="Last" \ - --data author_email="first.last@example.com" \ - --data review_team="@first-last/developers" \ - --data github_board_number=22 - # Run checks in the generated test Python package - cd $test_dir - git add . - git commit -m "test: initial copy" - just check-python check-spelling - # TODO: Find some way to test the `update` command - # Check that recopy works - echo "Testing recopy command -----------" - rm .cz.toml - git add . - git commit -m "test: preparing to recopy from the template" - uvx copier recopy \ - --vcs-ref=$commit \ - --defaults \ - --overwrite \ - --trust - # Check that copying onto an existing Python package works - echo "Using the template in an existing package command -----------" - rm .cz.toml .copier-answers.yml LICENSE.md - git add . - git commit -m "test: preparing to copy onto an existing package" - uvx copier copy \ - $template_dir $test_dir \ - --vcs-ref=$commit \ - --defaults \ - --trust \ - --overwrite \ - --data package_github_repo="first-last/repo" \ - --data is_seedcase_project={{ is_seedcase_project }} \ - --data author_given_name="First" \ - --data author_family_name="Last" \ - --data author_email="first.last@example.com" \ - --data review_team="@first-last/developers" \ - --data github_board_number=22 +# Test that a Python package can be created from the template, with parameters for: `is_seedcase_project` (true or false) and `hosting_provider` (either "gh-pages" or "netlify") +test is_seedcase_project="true" hosting_provider="netlify": + sh ./test-template.sh {{ is_seedcase_project }} {{ hosting_provider }} # Clean up any leftover and temporary build files cleanup: diff --git a/test-template.sh b/test-template.sh new file mode 100644 index 0000000..33f9ad2 --- /dev/null +++ b/test-template.sh @@ -0,0 +1,82 @@ +#!/usr/bin/env bash + +# Needs two arguments: +# +# 1. is_seedcase_project: true or false +# 2. hosting_provider: e.g., "github", "gitlab", etc. + +# Argument naming ----- +is_seedcase_project="${1}" +hosting_provider="${2}" + +if [ -z "$is_seedcase_project" ] || [ -z "$hosting_provider" ]; then + echo "Usage: sh $0 " + echo "Example: sh $0 true netlify" + exit 1 +fi + +# Set up variables and functions for the test ----- +test_name="test-package-$hosting_provider" +test_dir="$(pwd)/_temp/$is_seedcase_project/$test_name" +template_dir="$(pwd)" +# Use the latest commit for the template +commit=$(git rev-parse HEAD) + +# Needs three arguments: +# +# 1. Template directory +# 2. Destination directory +# 3. VCS ref (commit, branch, tag, etc.) +copy () { + # vcs-ref means the current commit/head, not a tag. + uvx copier copy $1 $2 \ + --vcs-ref=$3 \ + --defaults \ + --data is_seedcase_project=$is_seedcase_project \ + --data github_user="first-last" \ + --data hosting_provider=$hosting_provider \ + --data author_given_name="First" \ + --data author_family_name="Last" \ + --data author_email="first.last@example.com" \ + --data review_team="@first-last/developers" \ + --data github_board_number=22 \ + --overwrite \ + --skip-tasks \ + --trust +} + +# Pre-test setup ----- +# Remove the leftover directory from previous runs +rm -rf $test_dir +mkdir -p $test_dir + +# Check initial creation ----- +# TODO: Find some way to test the `update` command +# Any step that fails will exit the script with an error and not continue +echo "Testing copy for new projects when: 'is_seedcase_project'='$is_seedcase_project', 'hosting_provider'='$hosting_provider' -----------" +( + cd $test_dir && + copy $template_dir $test_dir $commit && + git init -b main && + git add . && + git commit --quiet -m "test: initial copy" && + # Check that recopy works ----- + echo "Testing recopy when: 'is_seedcase_project'='$$is_seedcase_project', 'hosting_provider'='$hosting_provider' -----------" && + rm .cz.toml && + git add . && + git commit --quiet -m "test: preparing to recopy from the template" && + uvx copier recopy \ + --vcs-ref=$commit \ + --defaults \ + --overwrite \ + --skip-tasks \ + --trust && + # Check that copying onto an existing package works ----- + echo "Testing copy in existing projects when: 'is_seedcase_project'='$is_seedcase_project', 'hosting_provider'='$hosting_provider' -----------" && + rm .cz.toml .copier-answers.yml && + git add . && + git commit --quiet -m "test: preparing to copy onto an existing package" && + copy $template_dir $test_dir $commit #&& + # Checks and builds ----- + # just run-all +)