From ed24477fd3e4eb7837a05d644052322b50ee2496 Mon Sep 17 00:00:00 2001 From: Andy Feller Date: Thu, 24 Oct 2024 10:19:50 -0400 Subject: [PATCH 1/3] Add comprehensive testscript for gh ext commandset Rather than multiple separate testscripts per `gh ext` subcommand, this commit adds a comprehensive test around `gh extension` commandset. --- acceptance/acceptance_test.go | 9 +++ .../testdata/extension/commandset.txtar | 66 +++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 acceptance/testdata/extension/commandset.txtar diff --git a/acceptance/acceptance_test.go b/acceptance/acceptance_test.go index 24cb083c997..b22929ed560 100644 --- a/acceptance/acceptance_test.go +++ b/acceptance/acceptance_test.go @@ -54,6 +54,15 @@ func TestGPGKeys(t *testing.T) { testscript.Run(t, testScriptParamsFor(tsEnv, "gpg-key")) } +func TestExtensions(t *testing.T) { + var tsEnv testScriptEnv + if err := tsEnv.fromEnv(); err != nil { + t.Fatal(err) + } + + testscript.Run(t, testScriptParamsFor(tsEnv, "extension")) +} + func TestIssues(t *testing.T) { var tsEnv testScriptEnv if err := tsEnv.fromEnv(); err != nil { diff --git a/acceptance/testdata/extension/commandset.txtar b/acceptance/testdata/extension/commandset.txtar new file mode 100644 index 00000000000..e994ec3b06a --- /dev/null +++ b/acceptance/testdata/extension/commandset.txtar @@ -0,0 +1,66 @@ +# Setup environment variables used for testscript +env EXT_NAME=${SCRIPT_NAME}-${RANDOM_STRING} +env EXT_SCRIPT=gh-${EXT_NAME} +env REPO=gh-${EXT_NAME} + +# Use gh as a credential helper +exec gh auth setup-git + +# Create local repository for extension +exec gh extension create $EXT_NAME +cd $REPO + +# Setup v1 executable baseline for extension +mv ../v1.sh $EXT_SCRIPT +chmod 777 $EXT_SCRIPT +exec git add $EXT_SCRIPT +exec git commit -m 'Setup extension as v1' + +# Upload local extension repository +exec gh repo create $ORG/$REPO --private --source . --push + +# Defer repo cleanup +defer gh repo delete --yes $ORG/$REPO + +# Verify extension shows up in search, sleep for indexing +exec gh repo edit --add-topic gh-extension +sleep 10 +exec gh extension search --owner $ORG $EXT_NAME +stdout ${ORG}/${REPO} + +# Verify repository can be installed as extension +exec gh extension install $ORG/$REPO +exec gh extension list +stdout ${ORG}/${REPO} + +# Verify v1 extension behavior before upgrade +exec gh extension exec $EXT_NAME +stdout 'gh ext create v1' + +# Setup v2 executable upgrade for extension +mv ../v2.sh $EXT_SCRIPT +chmod 777 $EXT_SCRIPT +exec git add $EXT_SCRIPT +exec git commit -m 'Upgrade extension to v2' +exec git push -u origin + +# Verify v2 extension upgrade +exec gh extension upgrade $EXT_NAME +exec gh extension exec $EXT_NAME +stdout 'gh ext upgrade v2' + +# Verify extension can be removed +exec gh extension remove $EXT_NAME +! stdout ${ORG}/${REPO} + +-- v1.sh -- +#!/usr/bin/env bash +set -e + +echo "gh ext create v1" + +-- v2.sh -- +#!/usr/bin/env bash +set -e + +echo "gh ext upgrade v2" From 911f07093621711131f29f061fe2ef565ff54dd3 Mon Sep 17 00:00:00 2001 From: Andy Feller Date: Fri, 25 Oct 2024 08:40:31 -0400 Subject: [PATCH 2/3] Skip extension testscript if bash isn't available As this testscript creates a Bash-based script extension, the testscript should be skipped if it isn't on the path and executable. Ideally, we would refactor this test to isolate that portion of the tests OR switch to a Go-based extension that can be compiled and run everywhere. --- acceptance/testdata/extension/commandset.txtar | 3 +++ 1 file changed, 3 insertions(+) diff --git a/acceptance/testdata/extension/commandset.txtar b/acceptance/testdata/extension/commandset.txtar index e994ec3b06a..a4d194757de 100644 --- a/acceptance/testdata/extension/commandset.txtar +++ b/acceptance/testdata/extension/commandset.txtar @@ -1,3 +1,6 @@ +# Skip if Bash is not available given script extension +[!exec:bash] skip + # Setup environment variables used for testscript env EXT_NAME=${SCRIPT_NAME}-${RANDOM_STRING} env EXT_SCRIPT=gh-${EXT_NAME} From 37da12a9d28a24678723cd0d463f034b1c4c3c2e Mon Sep 17 00:00:00 2001 From: Andy Feller Date: Fri, 25 Oct 2024 08:56:02 -0400 Subject: [PATCH 3/3] Rename similar to other coarse commandset tests Based on insights gained from reviewing conventions in #9815 with @jtmcg, I'm renaming this testscript to keep consistent with `gpg-key`, `label`, `ssh-key`, etc. --- .../testdata/extension/{commandset.txtar => extension.txtar} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename acceptance/testdata/extension/{commandset.txtar => extension.txtar} (100%) diff --git a/acceptance/testdata/extension/commandset.txtar b/acceptance/testdata/extension/extension.txtar similarity index 100% rename from acceptance/testdata/extension/commandset.txtar rename to acceptance/testdata/extension/extension.txtar