diff --git a/.gitignore b/.gitignore index 3ee4fe849..d5067be9f 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,7 @@ docs.kosli.com/content/client_reference/kosli* docs.kosli.com/public/ docs.kosli.com/.netlify *.tar.gz +/.idea # keep it uncommented on main docs.kosli.com/assets/metadata.json tmp/ diff --git a/Makefile b/Makefile index bcbf45a34..851d706e8 100644 --- a/Makefile +++ b/Makefile @@ -69,14 +69,17 @@ ensure_network: ensure_gotestsum: @go install gotest.tools/gotestsum@latest +clear_local_image_ref: + rm /tmp/server-image.txt + test_setup: ensure_gotestsum # cat and exit if error - ./hack/get-server-image.sh > /tmp/server-image.txt || (cat /tmp/server-image.txt && exit 1) + @test -f /tmp/server-image.txt || ./hack/get-server-image.sh /tmp/server-image.txt export KOSLI_SERVER_IMAGE=$$(cat /tmp/server-image.txt) && ./bin/reset-or-start-server.sh test_setup_restart_server: ensure_gotestsum # cat and exit if error - ./hack/get-server-image.sh > /tmp/server-image.txt || (cat /tmp/server-image.txt && exit 1) + @test -f /tmp/server-image.txt || ./hack/get-server-image.sh /tmp/server-image.txt export KOSLI_SERVER_IMAGE=$$(cat /tmp/server-image.txt) && ./bin/reset-or-start-server.sh force test_integration: deps vet ensure_network test_setup ## Run tests except the too slow ones diff --git a/cmd/kosli/attestJira.go b/cmd/kosli/attestJira.go index baddf69c8..13170840c 100644 --- a/cmd/kosli/attestJira.go +++ b/cmd/kosli/attestJira.go @@ -329,7 +329,10 @@ func (o *attestJiraOptions) run(args []string) error { } func (o *attestJiraOptions) validateJiraProjectKeys() error { - matchesJiraProjectKeys, err := regexp.Compile("^[A-Z][A-Z0-9]{1,9}$") + // According to Jira documentation https://confluence.atlassian.com/adminjiraserver/changing-the-project-key-format-938847081.html + // the Jira project key has to start with a capital letter and can then have capital letters numbers and underscore. + // But Jira itself will accept lower case letters when searching a repository for matching branches and commits + matchesJiraProjectKeys, err := regexp.Compile("^[A-Za-z][A-Za-z0-9_]{1,9}$") if err != nil { return err } diff --git a/cmd/kosli/attestJira_test.go b/cmd/kosli/attestJira_test.go index 8bfafeec6..4f95e1190 100644 --- a/cmd/kosli/attestJira_test.go +++ b/cmd/kosli/attestJira_test.go @@ -248,15 +248,28 @@ func (suite *AttestJiraCommandTestSuite) TestAttestJiraCmd() { commitMessage: "EX-1 test commit", }, }, + { + name: "can specify lower case and underscore jira project key", + cmd: fmt.Sprintf(`attest jira --name bar + --jira-base-url https://kosli-test.atlassian.net --jira-username tore@kosli.com + --jira-project-key low + --jira-project-key A99 + --jira-project-key A_99 + --repo-root %s %s`, suite.tmpDir, suite.defaultKosliArguments), + golden: "jira attestation 'bar' is reported to trail: test-123\n", + additionalConfig: jiraTestsAdditionalConfig{ + commitMessage: "low-1 test commit", + }, + }, { wantError: true, name: "fails with an invalid Jira project key specified", - cmd: fmt.Sprintf(`attest jira --name bar + cmd: fmt.Sprintf(`attest jira --name bar --jira-base-url https://kosli-test.atlassian.net --jira-username tore@kosli.com - --jira-project-key ex --jira-project-key 1AB + --jira-project-key AB-44 --repo-root %s %s`, suite.tmpDir, suite.defaultKosliArguments), - golden: "Error: Invalid Jira project keys: ex, 1AB\n", + golden: "Error: Invalid Jira project keys: 1AB, AB-44\n", additionalConfig: jiraTestsAdditionalConfig{ commitMessage: "EX-1 test commit", }, diff --git a/hack/get-server-image.sh b/hack/get-server-image.sh index 4950cdb36..91715ca3d 100755 --- a/hack/get-server-image.sh +++ b/hack/get-server-image.sh @@ -1,6 +1,13 @@ #!/bin/bash set -uo pipefail +if [ $# -lt 1 ]; then + echo "Output result file is missing" >&2 + exit 1 +fi + +OUTPUT_FILE=$1; shift + # Check that jq is installed if ! command -v jq &> /dev/null; then echo "❌ Error: 'jq' is not installed. Please install it:" >&2 @@ -29,4 +36,4 @@ echo "$json" | jq -r ' | select(.name | test("merkely:")) | select(.annotation.type != "exited") | "\(.name | sub(":.*"; ""))@sha256:\(.fingerprint)" -' \ No newline at end of file +' > ${OUTPUT_FILE}