diff options
| author | Egor Tensin <egor@tensin.name> | 2026-10-04 21:09:45 +0500 |
|---|---|---|
| committer | Egor Tensin <egor@tensin.name> | 2026-10-04 21:09:45 +0500 |
| commit | 0fd9d140ca5e2122fc2607b7b4552b49cd3e056d (patch) | |
| tree | cee0796f6dedd2f6a5f5d0418ee39a63a96f22fd | |
| parent | debian: ditch Vagrant, switch to Docker (diff) | |
| parent | workflows/ci: move AUR setup steps to aur:Makefile (diff) | |
| download | config-links-0fd9d140ca5e2122fc2607b7b4552b49cd3e056d.tar.gz config-links-0fd9d140ca5e2122fc2607b7b4552b49cd3e056d.zip | |
Merge tag 'v2.1.10' into debian
v2.1.10
| -rw-r--r-- | .github/workflows/ci.yml | 44 | ||||
| -rw-r--r-- | Makefile | 12 | ||||
| -rw-r--r-- | prelude.mk | 6 | ||||
| -rw-r--r-- | test/data/src/%DEST%/bar/baz/5.txt | 1 | ||||
| -rw-r--r-- | test/lib/log.sh | 13 | ||||
| -rw-r--r-- | test/lib/test.sh | 34 | ||||
| -rwxr-xr-x | test/main.sh | 2 | ||||
| -rw-r--r-- | test/tst-chmod.sh | 5 | ||||
| -rw-r--r-- | test/tst-dir-symlink-delete.sh | 30 | ||||
| -rw-r--r-- | test/tst-dir-symlink-remove-shared-file.sh | 34 | ||||
| -rw-r--r-- | test/tst-remove-dir-symlink.sh | 8 | ||||
| -rw-r--r-- | test/tst-update-chmod.sh | 1 | ||||
| -rw-r--r-- | test/tst-update-dir-symlink.sh | 10 | ||||
| -rw-r--r-- | test/tst-update-symlink.sh | 1 | ||||
| -rw-r--r-- | test/tst-update.sh | 4 |
15 files changed, 130 insertions, 75 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f70fc60..20d8729 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,14 +30,19 @@ jobs: test_docker: strategy: matrix: - # Keep in sync with those in Makefile: - distro: [xenial, focal] + # Keep in sync with those in Makefile & Launchpad: + distro: + - xenial + - bionic + - focal + - jammy + - noble + - resolute runs-on: ubuntu-latest name: 'Test / Docker / ${{ matrix.distro }}' steps: - name: Checkout uses: actions/checkout@v7 - - name: Test run: make 'test/docker/${{ matrix.distro }}' @@ -52,6 +57,9 @@ jobs: && !startsWith(github.ref, 'refs/tags/debian/') container: image: archlinux:base-devel + env: + SSH_KEY: | + ${{ secrets.SSH_KEY }} steps: # This step must be done before actions/checkout. From the latter's # output: @@ -61,39 +69,11 @@ jobs: - name: Install dependencies run: | pacman -Syu --noconfirm git openssh - - name: Checkout uses: actions/checkout@v7 with: ref: aur token: '${{ secrets.GH_TOKEN }}' - - # makepkg for no reason hard-forbids running as root. Kill me now. - - name: Add builder user - run: | - useradd -m -s /bin/bash builder - passwd -d builder - echo 'builder ALL=(ALL) ALL' >> /etc/sudoers - chown -R builder:builder -- "$GITHUB_WORKSPACE" - - - name: Configure SSH - run: | - mkdir -p /home/builder/.ssh/ - cat > /home/builder/.ssh/config <<'EOF' - StrictHostKeyChecking no - EOF - cat > /home/builder/.ssh/id_ed25519 <<'EOF' - ${{ secrets.SSH_KEY }} - EOF - chown -R builder:builder /home/builder/.ssh - chmod 0600 /home/builder/.ssh/id_ed25519 - - - name: Configure git - run: | - # See https://github.com/actions/checkout#push-a-commit-using-the-built-in-token - runuser -u builder -- git -C "$GITHUB_WORKSPACE" config user.name "github-actions[bot]" - runuser -u builder -- git -C "$GITHUB_WORKSPACE" config user.email "41898282+github-actions[bot]@users.noreply.github.com" - - name: Run maintenance run: | - runuser -u builder -- make -C "$GITHUB_WORKSPACE" maintenance + make -C "$GITHUB_WORKSPACE" ci @@ -1,8 +1,5 @@ include prelude.mk -.PHONY: DO -DO: - PKG_NAME ?= config-links DESTDIR ?= @@ -25,9 +22,14 @@ test/docker/%: DO # Xenial has bash 4.3, which doesn't support inherit_errexit, which is a good # thing to test against. # -# Keep the list repositories synced with the GitHub actions workflow. +# Keep the list distros synced with the GitHub actions workflow & Launchpad. .PHONY: test/docker -test/docker: test/docker/xenial test/docker/focal +test/docker: test/docker/xenial +test/docker: test/docker/bionic +test/docker: test/docker/focal +test/docker: test/docker/jammy +test/docker: test/docker/noble +test/docker: test/docker/resolute .PHONY: install install: @@ -21,3 +21,9 @@ ifeq ($$(origin $(1)),command line) override $(1) := $$(value $(1)) endif endef + +# A helper target to force execution of pattern rules (works like .PHONY for +# them): https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html +# +.PHONY: DO +DO: diff --git a/test/data/src/%DEST%/bar/baz/5.txt b/test/data/src/%DEST%/bar/baz/5.txt new file mode 100644 index 0000000..7ed6ff8 --- /dev/null +++ b/test/data/src/%DEST%/bar/baz/5.txt @@ -0,0 +1 @@ +5 diff --git a/test/lib/log.sh b/test/lib/log.sh index b26e16a..242ab31 100644 --- a/test/lib/log.sh +++ b/test/lib/log.sh @@ -1,5 +1,5 @@ # Copyright (c) 2026 Egor Tensin <egor@tensin.name> -# This file is part of the "config-links" project. +# This file is part of the "Config file sharing" project. # For details, see https://github.com/egor-tensin/config-links # Distributed under the MIT License. @@ -10,6 +10,17 @@ log() { done } +log_run() { + if [ "$#" -lt 1 ]; then + log "usage: ${FUNCNAME[0]} ARGV0 [ARG...]" + return 1 + fi + + local msg='Running:' + msg="$msg$( printf -- ' %q' "$@" )" + log "$msg" +} + fail() { local msg for msg; do diff --git a/test/lib/test.sh b/test/lib/test.sh index 1406a78..400f39a 100644 --- a/test/lib/test.sh +++ b/test/lib/test.sh @@ -1,15 +1,11 @@ # Copyright (c) 2026 Egor Tensin <egor@tensin.name> -# This file is part of the "config-links" project. +# This file is part of the "Config file sharing" project. # For details, see https://github.com/egor-tensin/config-links # Distributed under the MIT License. test_should_fail= - -src_dir_name='src' -dest_dir_name='dest' -alt_dest_dir_name='alt_dest' - test_root_dir= + test_src_dir= test_dest_dir= test_alt_dest_dir= @@ -19,18 +15,18 @@ test_setup() { # mktemp returns /var/..., which is actually in /private/var/... on macOS. test_root_dir="$( readlink -e -- "$test_root_dir" )" - test_src_dir="$test_root_dir/$src_dir_name" - test_dest_dir="$test_root_dir/$dest_dir_name" - test_alt_dest_dir="$test_root_dir/$alt_dest_dir_name" + test_src_dir="$test_root_dir/src" + test_dest_dir="$test_root_dir/dest" + test_alt_dest_dir="$test_root_dir/alt_test" log "Root directory: $test_root_dir" log "Shared directory: $test_src_dir" log "%DEST% directory: $test_dest_dir" log "%ALT_DEST% directory: $test_alt_dest_dir" - cp -r -- "$script_dir/data/$src_dir_name" "$test_src_dir" - cp -r -- "$script_dir/data/$dest_dir_name" "$test_dest_dir" - cp -r -- "$script_dir/data/$dest_dir_name" "$test_alt_dest_dir" + cp -r -- "$script_dir/data/src" "$test_src_dir" + cp -r -- "$script_dir/data/dest" "$test_dest_dir" + cp -r -- "$script_dir/data/dest" "$test_alt_dest_dir" } test_setup_symlink() { @@ -56,13 +52,15 @@ test_cleanup_default() { } test_run_script() { - local msg='Executing script:' - msg="$msg$( printf -- ' %q' "$@" --shared-dir "$test_src_dir" --database "$test_root_dir/links.bin" )" - log "$msg" - - DEST="$test_dest_dir" ALT_DEST="$test_alt_dest_dir" "$@" \ - --shared-dir "$test_src_dir" \ + local cmd=( + "$@" + --shared-dir "$test_src_dir" --database "$test_root_dir/links.bin" + ) + + log_run "${cmd[@]}" + + DEST="$test_dest_dir" ALT_DEST="$test_alt_dest_dir" "${cmd[@]}" } test_run_update() { diff --git a/test/main.sh b/test/main.sh index 52b19ad..76428f5 100755 --- a/test/main.sh +++ b/test/main.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash # Copyright (c) 2026 Egor Tensin <egor@tensin.name> -# This file is part of the "config-links" project. +# This file is part of the "Config file sharing" project. # For details, see https://github.com/egor-tensin/config-links # Distributed under the MIT License. diff --git a/test/tst-chmod.sh b/test/tst-chmod.sh index b118e5e..5e26063 100644 --- a/test/tst-chmod.sh +++ b/test/tst-chmod.sh @@ -4,14 +4,17 @@ test_run() { test_setup test_run_update - local expected_output="$test_dest_dir-> + local expected_output + expected_output="$test_dest_dir-> $test_dest_dir/1.txt->$test_src_dir/%DEST%/1.txt $test_dest_dir/bar-> $test_dest_dir/bar/3.txt->$test_src_dir/%DEST%/bar/3.txt $test_dest_dir/bar/baz-> $test_dest_dir/bar/baz/4.txt->$test_src_dir/%DEST%/bar/baz/4.txt +$test_dest_dir/bar/baz/5.txt->$test_src_dir/%DEST%/bar/baz/5.txt $test_dest_dir/foo-> $test_dest_dir/foo/2.txt->$test_src_dir/%DEST%/foo/2.txt" + test_verify_output "$test_dest_dir" "$expected_output" log "Verifying 1.txt's (the shared file) permissions..." diff --git a/test/tst-dir-symlink-delete.sh b/test/tst-dir-symlink-delete.sh index f53d87c..82de5ab 100644 --- a/test/tst-dir-symlink-delete.sh +++ b/test/tst-dir-symlink-delete.sh @@ -5,21 +5,37 @@ test_run() { test_setup_dir_symlink test_run_update - # Remove the directory symlink: - rm -- "$test_src_dir/%ALT_DEST%" - test_run_update - - local expected_output="$test_dest_dir-> + local expected_output + expected_output="$test_dest_dir-> $test_dest_dir/1.txt->$test_src_dir/%DEST%/1.txt $test_dest_dir/bar-> $test_dest_dir/bar/3.txt->$test_src_dir/%DEST%/bar/3.txt $test_dest_dir/bar/baz-> $test_dest_dir/bar/baz/4.txt->$test_src_dir/%DEST%/bar/baz/4.txt +$test_dest_dir/bar/baz/5.txt->$test_src_dir/%DEST%/bar/baz/5.txt $test_dest_dir/foo-> $test_dest_dir/foo/2.txt->$test_src_dir/%DEST%/foo/2.txt" test_verify_output "$test_dest_dir" "$expected_output" - expected_output="$test_alt_dest_dir->" - test_verify_output "$test_alt_dest_dir" "$expected_output" + local expected_alt_output + expected_alt_output="$test_alt_dest_dir-> +$test_alt_dest_dir/1.txt->$test_src_dir/%ALT_DEST%/1.txt +$test_alt_dest_dir/bar-> +$test_alt_dest_dir/bar/3.txt->$test_src_dir/%ALT_DEST%/bar/3.txt +$test_alt_dest_dir/bar/baz-> +$test_alt_dest_dir/bar/baz/4.txt->$test_src_dir/%ALT_DEST%/bar/baz/4.txt +$test_alt_dest_dir/bar/baz/5.txt->$test_src_dir/%ALT_DEST%/bar/baz/5.txt +$test_alt_dest_dir/foo-> +$test_alt_dest_dir/foo/2.txt->$test_src_dir/%ALT_DEST%/foo/2.txt" + + test_verify_output "$test_alt_dest_dir" "$expected_alt_output" + + # Remove the directory symlink: + rm -- "$test_src_dir/%ALT_DEST%" + test_run_update + + test_verify_output "$test_dest_dir" "$expected_output" + expected_alt_output="$test_alt_dest_dir->" + test_verify_output "$test_alt_dest_dir" "$expected_alt_output" } diff --git a/test/tst-dir-symlink-remove-shared-file.sh b/test/tst-dir-symlink-remove-shared-file.sh index 3e20ab0..614ca8c 100644 --- a/test/tst-dir-symlink-remove-shared-file.sh +++ b/test/tst-dir-symlink-remove-shared-file.sh @@ -4,27 +4,55 @@ test_run() { test_setup_dir_symlink test_run_update + local expected_output + expected_output="$test_dest_dir-> +$test_dest_dir/1.txt->$test_src_dir/%DEST%/1.txt +$test_dest_dir/bar-> +$test_dest_dir/bar/3.txt->$test_src_dir/%DEST%/bar/3.txt +$test_dest_dir/bar/baz-> +$test_dest_dir/bar/baz/4.txt->$test_src_dir/%DEST%/bar/baz/4.txt +$test_dest_dir/bar/baz/5.txt->$test_src_dir/%DEST%/bar/baz/5.txt +$test_dest_dir/foo-> +$test_dest_dir/foo/2.txt->$test_src_dir/%DEST%/foo/2.txt" + + test_verify_output "$test_dest_dir" "$expected_output" + + local expected_alt_output + expected_alt_output="$test_alt_dest_dir-> +$test_alt_dest_dir/1.txt->$test_src_dir/%ALT_DEST%/1.txt +$test_alt_dest_dir/bar-> +$test_alt_dest_dir/bar/3.txt->$test_src_dir/%ALT_DEST%/bar/3.txt +$test_alt_dest_dir/bar/baz-> +$test_alt_dest_dir/bar/baz/4.txt->$test_src_dir/%ALT_DEST%/bar/baz/4.txt +$test_alt_dest_dir/bar/baz/5.txt->$test_src_dir/%ALT_DEST%/bar/baz/5.txt +$test_alt_dest_dir/foo-> +$test_alt_dest_dir/foo/2.txt->$test_src_dir/%ALT_DEST%/foo/2.txt" + + test_verify_output "$test_alt_dest_dir" "$expected_alt_output" + # Remove a random shared file: rm -- "$test_src_dir/%DEST%/bar/3.txt" test_run_update - local expected_output="$test_dest_dir-> + expected_output="$test_dest_dir-> $test_dest_dir/1.txt->$test_src_dir/%DEST%/1.txt $test_dest_dir/bar-> $test_dest_dir/bar/baz-> $test_dest_dir/bar/baz/4.txt->$test_src_dir/%DEST%/bar/baz/4.txt +$test_dest_dir/bar/baz/5.txt->$test_src_dir/%DEST%/bar/baz/5.txt $test_dest_dir/foo-> $test_dest_dir/foo/2.txt->$test_src_dir/%DEST%/foo/2.txt" test_verify_output "$test_dest_dir" "$expected_output" - expected_output="$test_alt_dest_dir-> + expected_alt_output="$test_alt_dest_dir-> $test_alt_dest_dir/1.txt->$test_src_dir/%ALT_DEST%/1.txt $test_alt_dest_dir/bar-> $test_alt_dest_dir/bar/baz-> $test_alt_dest_dir/bar/baz/4.txt->$test_src_dir/%ALT_DEST%/bar/baz/4.txt +$test_alt_dest_dir/bar/baz/5.txt->$test_src_dir/%ALT_DEST%/bar/baz/5.txt $test_alt_dest_dir/foo-> $test_alt_dest_dir/foo/2.txt->$test_src_dir/%ALT_DEST%/foo/2.txt" - test_verify_output "$test_alt_dest_dir" "$expected_output" + test_verify_output "$test_alt_dest_dir" "$expected_alt_output" } diff --git a/test/tst-remove-dir-symlink.sh b/test/tst-remove-dir-symlink.sh index c524ee6..e9bcc67 100644 --- a/test/tst-remove-dir-symlink.sh +++ b/test/tst-remove-dir-symlink.sh @@ -5,9 +5,11 @@ test_run() { test_run_update test_run_remove - local expected_output="$test_dest_dir->" + local expected_output + expected_output="$test_dest_dir->" test_verify_output "$test_dest_dir" "$expected_output" - expected_output="$test_alt_dest_dir->" - test_verify_output "$test_alt_dest_dir" "$expected_output" + local expected_alt_output + expected_alt_output="$test_alt_dest_dir->" + test_verify_output "$test_alt_dest_dir" "$expected_alt_output" } diff --git a/test/tst-update-chmod.sh b/test/tst-update-chmod.sh index a78ee15..60774a1 100644 --- a/test/tst-update-chmod.sh +++ b/test/tst-update-chmod.sh @@ -11,6 +11,7 @@ $test_dest_dir/bar-> $test_dest_dir/bar/3.txt->$test_src_dir/%DEST%/bar/3.txt $test_dest_dir/bar/baz-> $test_dest_dir/bar/baz/4.txt->$test_src_dir/%DEST%/bar/baz/4.txt +$test_dest_dir/bar/baz/5.txt->$test_src_dir/%DEST%/bar/baz/5.txt $test_dest_dir/foo-> $test_dest_dir/foo/2.txt->$test_src_dir/%DEST%/foo/2.txt" diff --git a/test/tst-update-dir-symlink.sh b/test/tst-update-dir-symlink.sh index 27418ab..3bc4296 100644 --- a/test/tst-update-dir-symlink.sh +++ b/test/tst-update-dir-symlink.sh @@ -5,25 +5,29 @@ test_run() { test_setup_dir_symlink test_run_update - local expected_output="$test_dest_dir-> + local expected_output + expected_output="$test_dest_dir-> $test_dest_dir/1.txt->$test_src_dir/%DEST%/1.txt $test_dest_dir/bar-> $test_dest_dir/bar/3.txt->$test_src_dir/%DEST%/bar/3.txt $test_dest_dir/bar/baz-> $test_dest_dir/bar/baz/4.txt->$test_src_dir/%DEST%/bar/baz/4.txt +$test_dest_dir/bar/baz/5.txt->$test_src_dir/%DEST%/bar/baz/5.txt $test_dest_dir/foo-> $test_dest_dir/foo/2.txt->$test_src_dir/%DEST%/foo/2.txt" test_verify_output "$test_dest_dir" "$expected_output" - expected_output="$test_alt_dest_dir-> + local expected_alt_output + expected_alt_output="$test_alt_dest_dir-> $test_alt_dest_dir/1.txt->$test_src_dir/%ALT_DEST%/1.txt $test_alt_dest_dir/bar-> $test_alt_dest_dir/bar/3.txt->$test_src_dir/%ALT_DEST%/bar/3.txt $test_alt_dest_dir/bar/baz-> $test_alt_dest_dir/bar/baz/4.txt->$test_src_dir/%ALT_DEST%/bar/baz/4.txt +$test_alt_dest_dir/bar/baz/5.txt->$test_src_dir/%ALT_DEST%/bar/baz/5.txt $test_alt_dest_dir/foo-> $test_alt_dest_dir/foo/2.txt->$test_src_dir/%ALT_DEST%/foo/2.txt" - test_verify_output "$test_alt_dest_dir" "$expected_output" + test_verify_output "$test_alt_dest_dir" "$expected_alt_output" } diff --git a/test/tst-update-symlink.sh b/test/tst-update-symlink.sh index 6a90491..598e12a 100644 --- a/test/tst-update-symlink.sh +++ b/test/tst-update-symlink.sh @@ -11,6 +11,7 @@ $test_dest_dir/bar-> $test_dest_dir/bar/3.txt->$test_src_dir/%DEST%/bar/3.txt $test_dest_dir/bar/baz-> $test_dest_dir/bar/baz/4.txt->$test_src_dir/%DEST%/bar/baz/4.txt +$test_dest_dir/bar/baz/5.txt->$test_src_dir/%DEST%/bar/baz/5.txt $test_dest_dir/foo-> $test_dest_dir/foo/2.txt->$test_src_dir/%DEST%/foo/2.txt" diff --git a/test/tst-update.sh b/test/tst-update.sh index f33b929..bcb3ad7 100644 --- a/test/tst-update.sh +++ b/test/tst-update.sh @@ -5,12 +5,14 @@ test_run() { test_setup test_run_update - local expected_output="$test_dest_dir-> + local expected_output + expected_output="$test_dest_dir-> $test_dest_dir/1.txt->$test_src_dir/%DEST%/1.txt $test_dest_dir/bar-> $test_dest_dir/bar/3.txt->$test_src_dir/%DEST%/bar/3.txt $test_dest_dir/bar/baz-> $test_dest_dir/bar/baz/4.txt->$test_src_dir/%DEST%/bar/baz/4.txt +$test_dest_dir/bar/baz/5.txt->$test_src_dir/%DEST%/bar/baz/5.txt $test_dest_dir/foo-> $test_dest_dir/foo/2.txt->$test_src_dir/%DEST%/foo/2.txt" |
