From 957bf150a60ba9cbd64a537a8162156c9ee8f2fb Mon Sep 17 00:00:00 2001 From: moilanik Date: Sat, 13 Jun 2026 16:01:45 +0300 Subject: [PATCH] =?UTF-8?q?dispatch-workflow.sh:=20piiloriippuvuudet=20poi?= =?UTF-8?q?s=20=E2=80=94=20GITEA=5FAPI=5FURL=20ja=20GITEA=5FTOKEN=20nyt=20?= =?UTF-8?q?explicit=20parametreina?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/shared-scripts.md | 11 ++++--- docs/tickets/0002-dispatch-workflow-sh.md | 7 +++-- scripts/dispatch-workflow.sh | 9 +++--- tests/dispatch-workflow.bats | 36 ++++++++++------------- 4 files changed, 33 insertions(+), 30 deletions(-) diff --git a/docs/shared-scripts.md b/docs/shared-scripts.md index be8677a..b50fa25 100644 --- a/docs/shared-scripts.md +++ b/docs/shared-scripts.md @@ -67,7 +67,7 @@ Dispatchaa workflow'n toisessa repossa ja pollaa sen valmistumista synkronisesti ### Rajapinta ```bash -dispatch-workflow.sh [timeout_minutes] +dispatch-workflow.sh [timeout_minutes] ``` | Parametri | Pakollinen | Kuvaus | @@ -76,6 +76,8 @@ dispatch-workflow.sh [timeout_ | `workflow_file` | Kyllä | Workflow-tiedoston nimi (esim. `test.yml`) | | `ref` | Kyllä | Branch | | `inputs_json` | Kyllä | JSON-objekti input-parametreina | +| `gitea_api_url` | Kyllä | Gitean API-URL (esim. `https://gitea.example.com`) | +| `gitea_token` | Kyllä | Gitea API -token | | `timeout_minutes` | Ei | Oletus: 360 (6 tuntia) | ### Toiminta @@ -90,7 +92,8 @@ dispatch-workflow.sh [timeout_ ```bash dispatch-workflow.sh "tests/integration" "test.yml" "main" \ - '{"version":"1.2.3","tags":"@smoke","root_commit":"abc123","root_repo":"services/temperature-store"}' + '{"version":"1.2.3","tags":"@smoke","root_commit":"abc123","root_repo":"services/temperature-store"}' \ + "https://gitea.example.com" "gtp_abc123" ``` --- @@ -181,8 +184,8 @@ Skriptit lukevat nämä Gitea Actionsin ympäristömuuttujat: | Muuttuja | Lähde | Käyttäjä | |----------|-------|----------| -| `GITEA_API_URL` | Org variable | Kaikki skriptit | -| `GITEA_TOKEN` | Org secret | `report-status.sh`, `dispatch-workflow.sh`, `tag-commit.sh` | +| `GITEA_API_URL` | Org variable | `report-status.sh` | +| `GITEA_TOKEN` | Org secret | `report-status.sh`, `tag-commit.sh` | | `MINIO_BASE_URL` | Org variable | `push-reports.sh` | | `MINIO_ACCESS_KEY` | Org secret | `push-reports.sh` | | `MINIO_SECRET_KEY` | Org secret | `push-reports.sh` | diff --git a/docs/tickets/0002-dispatch-workflow-sh.md b/docs/tickets/0002-dispatch-workflow-sh.md index d4012d0..9a5ec11 100644 --- a/docs/tickets/0002-dispatch-workflow-sh.md +++ b/docs/tickets/0002-dispatch-workflow-sh.md @@ -54,7 +54,7 @@ Dispatchaa workflow toisessa repossa ja pollaa sen valmistumista synkronisesti. ## Rajapinta ```bash -dispatch-workflow.sh [timeout_minutes] +dispatch-workflow.sh [timeout_minutes] ``` | Parametri | Pakollinen | Kuvaus | @@ -63,6 +63,8 @@ dispatch-workflow.sh [timeout_ | `workflow_file` | Kyllä | Workflow-tiedosto (esim. `test.yml`) | | `ref` | Kyllä | Branch | | `inputs_json` | Kyllä | JSON-objekti input-parametreina | +| `gitea_api_url` | Kyllä | Gitean API-URL | +| `gitea_token` | Kyllä | Gitea API -token | | `timeout_minutes` | Ei | Oletus: 360 | ## API-kutsut @@ -77,7 +79,8 @@ dispatch-workflow.sh [timeout_ ```bash dispatch-workflow.sh "tests/integration" "test.yml" "main" \ - '{"version":"1.2.3","tags":"@smoke","root_commit":"abc123","root_repo":"services/temperature-store"}' + '{"version":"1.2.3","tags":"@smoke","root_commit":"abc123","root_repo":"services/temperature-store"}' \ + "https://gitea.example.com" "gtp_abc123" ``` ## Verifiointi diff --git a/scripts/dispatch-workflow.sh b/scripts/dispatch-workflow.sh index 78905b8..1564c84 100755 --- a/scripts/dispatch-workflow.sh +++ b/scripts/dispatch-workflow.sh @@ -1,20 +1,21 @@ #!/usr/bin/env bash set -euo pipefail -[ -z "${GITEA_API_URL:-}" ] && echo "ERROR: GITEA_API_URL is not set" >&2 && exit 1 -[ -z "${GITEA_TOKEN:-}" ] && echo "ERROR: GITEA_TOKEN is not set" >&2 && exit 1 - TARGET_REPO="${1:-}" WORKFLOW_FILE="${2:-}" REF="${3:-}" INPUTS_JSON="${4:-}" -TIMEOUT_MINUTES="${5:-360}" +GITEA_API_URL="${5:-}" +GITEA_TOKEN="${6:-}" +TIMEOUT_MINUTES="${7:-360}" POLL_INTERVAL="${DISPATCH_POLL_INTERVAL:-10}" [ -z "$TARGET_REPO" ] && echo "ERROR: target_repo argument is required" >&2 && exit 1 [ -z "$WORKFLOW_FILE" ] && echo "ERROR: workflow_file argument is required" >&2 && exit 1 [ -z "$REF" ] && echo "ERROR: ref argument is required" >&2 && exit 1 [ -z "$INPUTS_JSON" ] && echo "ERROR: inputs_json argument is required" >&2 && exit 1 +[ -z "$GITEA_API_URL" ] && echo "ERROR: gitea_api_url argument is required" >&2 && exit 1 +[ -z "$GITEA_TOKEN" ] && echo "ERROR: gitea_token argument is required" >&2 && exit 1 DISPATCH_URL="$GITEA_API_URL/api/v1/repos/$TARGET_REPO/actions/workflows/$WORKFLOW_FILE/dispatches" DISPATCH_BODY=$(jq -nc --arg ref "$REF" --argjson inputs "$INPUTS_JSON" '{ref: $ref, inputs: $inputs}') diff --git a/tests/dispatch-workflow.bats b/tests/dispatch-workflow.bats index 2b5575b..69e53bc 100644 --- a/tests/dispatch-workflow.bats +++ b/tests/dispatch-workflow.bats @@ -2,8 +2,6 @@ setup() { source tests/helpers/mock-api.sh - export GITEA_API_URL="http://localhost:18080" - export GITEA_TOKEN="test-token-abc123" export DISPATCH_POLL_INTERVAL="0.1" } @@ -21,7 +19,7 @@ teardown() { {"code":200,"body":{"id":1,"status":"completed","conclusion":"success"}} ]' mock_start - run bash scripts/dispatch-workflow.sh "test-owner/test-repo" "test.yml" "main" '{"version":"1.2.3"}' + run bash scripts/dispatch-workflow.sh "test-owner/test-repo" "test.yml" "main" '{"version":"1.2.3"}' "http://localhost:18080" "test-token-abc123" [ "$status" -eq 0 ] } @@ -33,7 +31,7 @@ teardown() { {"code":200,"body":{"id":1,"status":"completed","conclusion":"failure"}} ]' mock_start - run bash scripts/dispatch-workflow.sh "test-owner/test-repo" "test.yml" "main" '{"version":"1.2.3"}' + run bash scripts/dispatch-workflow.sh "test-owner/test-repo" "test.yml" "main" '{"version":"1.2.3"}' "http://localhost:18080" "test-token-abc123" [ "$status" -eq 1 ] } @@ -45,7 +43,7 @@ teardown() { {"code":200,"body":{"id":1,"status":"completed","conclusion":"cancelled"}} ]' mock_start - run bash scripts/dispatch-workflow.sh "test-owner/test-repo" "test.yml" "main" '{"version":"1.2.3"}' + run bash scripts/dispatch-workflow.sh "test-owner/test-repo" "test.yml" "main" '{"version":"1.2.3"}' "http://localhost:18080" "test-token-abc123" [ "$status" -eq 1 ] } @@ -63,7 +61,7 @@ teardown() { {"code":200,"body":{"id":1,"status":"running"}} ]' mock_start - run bash scripts/dispatch-workflow.sh "test-owner/test-repo" "test.yml" "main" '{"version":"1.2.3"}' "0.001" + run bash scripts/dispatch-workflow.sh "test-owner/test-repo" "test.yml" "main" '{"version":"1.2.3"}' "http://localhost:18080" "test-token-abc123" "0.001" [ "$status" -eq 124 ] } @@ -72,7 +70,7 @@ teardown() { {"code":500} ]' mock_start - run bash scripts/dispatch-workflow.sh "test-owner/test-repo" "test.yml" "main" '{"version":"1.2.3"}' + run bash scripts/dispatch-workflow.sh "test-owner/test-repo" "test.yml" "main" '{"version":"1.2.3"}' "http://localhost:18080" "test-token-abc123" [ "$status" -eq 1 ] } @@ -83,7 +81,7 @@ teardown() { {"code":200,"body":{"id":1,"status":"completed","conclusion":"success"}} ]' mock_start - run bash scripts/dispatch-workflow.sh "test-owner/test-repo" "test.yml" "main" '{"version":"1.2.3"}' + run bash scripts/dispatch-workflow.sh "test-owner/test-repo" "test.yml" "main" '{"version":"1.2.3"}' "http://localhost:18080" "test-token-abc123" [ "$status" -eq 0 ] path=$(mock_get_first_request_path) [[ "$path" == *"/api/v1/repos/test-owner/test-repo/actions/workflows/test.yml/dispatches"* ]] @@ -95,36 +93,34 @@ teardown() { [[ "$body" == *'"version":"1.2.3"'* ]] } -@test "missing GITEA_API_URL → exit 1 with error message" { - unset GITEA_API_URL - run bash scripts/dispatch-workflow.sh "test-owner/test-repo" "test.yml" "main" '{"version":"1.2.3"}' +@test "missing gitea_api_url argument → exit 1 with error message" { + run bash scripts/dispatch-workflow.sh "test-owner/test-repo" "test.yml" "main" '{"version":"1.2.3"}' "" "test-token-abc123" [ "$status" -eq 1 ] - [[ "$output" == *"ERROR"* || "$output" == *"GITEA_API_URL"* ]] + [[ "$output" == *"ERROR"* || "$output" == *"gitea_api_url"* ]] } -@test "missing GITEA_TOKEN → exit 1 with error message" { - unset GITEA_TOKEN - run bash scripts/dispatch-workflow.sh "test-owner/test-repo" "test.yml" "main" '{"version":"1.2.3"}' +@test "missing gitea_token argument → exit 1 with error message" { + run bash scripts/dispatch-workflow.sh "test-owner/test-repo" "test.yml" "main" '{"version":"1.2.3"}' "http://localhost:18080" "" [ "$status" -eq 1 ] - [[ "$output" == *"ERROR"* || "$output" == *"GITEA_TOKEN"* ]] + [[ "$output" == *"ERROR"* || "$output" == *"gitea_token"* ]] } @test "missing target_repo argument → exit 1" { - run bash scripts/dispatch-workflow.sh "" "test.yml" "main" '{}' + run bash scripts/dispatch-workflow.sh "" "test.yml" "main" '{}' "http://localhost:18080" "test-token-abc123" [ "$status" -eq 1 ] } @test "missing workflow_file argument → exit 1" { - run bash scripts/dispatch-workflow.sh "test-owner/test-repo" "" "main" '{}' + run bash scripts/dispatch-workflow.sh "test-owner/test-repo" "" "main" '{}' "http://localhost:18080" "test-token-abc123" [ "$status" -eq 1 ] } @test "missing ref argument → exit 1" { - run bash scripts/dispatch-workflow.sh "test-owner/test-repo" "test.yml" "" '{}' + run bash scripts/dispatch-workflow.sh "test-owner/test-repo" "test.yml" "" '{}' "http://localhost:18080" "test-token-abc123" [ "$status" -eq 1 ] } @test "missing inputs_json argument → exit 1" { - run bash scripts/dispatch-workflow.sh "test-owner/test-repo" "test.yml" "main" "" + run bash scripts/dispatch-workflow.sh "test-owner/test-repo" "test.yml" "main" "" "http://localhost:18080" "test-token-abc123" [ "$status" -eq 1 ] }