diff --git a/.github/workflows/release-acceptance.yml b/.github/workflows/release-acceptance.yml index 17e106c..1573863 100644 --- a/.github/workflows/release-acceptance.yml +++ b/.github/workflows/release-acceptance.yml @@ -34,7 +34,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 20 env: - STAGING_BASE_URL: ${{ secrets.STAGING_BASE_URL || vars.STAGING_BASE_URL }} + STAGING_BASE_URL: ${{ secrets.STAGING_BASE_URL || vars.STAGING_BASE_URL || 'https://tapi.hifast.biz' }} if: >- ${{ github.event_name == 'workflow_dispatch' || @@ -65,7 +65,7 @@ jobs: ACCEPTANCE_ADMIN_PASSWORD: ${{ secrets.ACCEPTANCE_ADMIN_PASSWORD }} ACCEPTANCE_USER_EMAIL: ${{ secrets.ACCEPTANCE_USER_EMAIL }} ACCEPTANCE_USER_PASSWORD: ${{ secrets.ACCEPTANCE_USER_PASSWORD }} - STAGING_BASE_URL: ${{ secrets.STAGING_BASE_URL || vars.STAGING_BASE_URL }} + STAGING_BASE_URL: ${{ secrets.STAGING_BASE_URL || vars.STAGING_BASE_URL || 'https://tapi.hifast.biz' }} STAGING_DB_HOST: ${{ secrets.STAGING_DB_HOST }} STAGING_DB_USER: ${{ secrets.STAGING_DB_USER }} STAGING_DB_PASSWORD: ${{ secrets.STAGING_DB_PASSWORD }} @@ -75,13 +75,24 @@ jobs: run: | set -euo pipefail - missing=() - required=( + if [ -z "${STAGING_BASE_URL:-}" ]; then + echo "STAGING_BASE_URL 未配置且默认值不可用" | tee "$ACCEPTANCE_FAILURE_LOG" + { + echo "## 发布验收测试" + echo + echo "状态:配置错误" + echo + echo "- `STAGING_BASE_URL` 不能为空。" + } >> "$GITHUB_STEP_SUMMARY" + exit 1 + fi + + missing_optional=() + optional=( ACCEPTANCE_ADMIN_EMAIL ACCEPTANCE_ADMIN_PASSWORD ACCEPTANCE_USER_EMAIL ACCEPTANCE_USER_PASSWORD - STAGING_BASE_URL STAGING_DB_HOST STAGING_DB_USER STAGING_DB_PASSWORD @@ -90,24 +101,35 @@ jobs: STAGING_REDIS_PASSWORD ) - for key in "${required[@]}"; do + for key in "${optional[@]}"; do if [ -z "${!key:-}" ]; then - missing+=("$key") + missing_optional+=("$key") fi done - if [ "${#missing[@]}" -gt 0 ]; then - printf '缺少必需 GitHub Actions secrets/vars:\n' | tee "$ACCEPTANCE_FAILURE_LOG" - printf -- '- %s\n' "${missing[@]}" | tee -a "$ACCEPTANCE_FAILURE_LOG" + : > "$ACCEPTANCE_FAILURE_LOG" + + if [ "${#missing_optional[@]}" -gt 0 ]; then + printf '缺少可选 GitHub Actions secrets/vars,部分验收用例将被跳过:\n' | tee -a "$ACCEPTANCE_FAILURE_LOG" + printf -- '- %s\n' "${missing_optional[@]}" | tee -a "$ACCEPTANCE_FAILURE_LOG" { echo "## 发布验收测试" echo - echo "状态:配置缺失" + echo "状态:部分配置缺失" echo - echo "缺少以下 secrets/vars:" - printf -- '- `%s`\n' "${missing[@]}" + echo "缺少以下可选 secrets/vars,对应验收用例会在测试阶段自动跳过:" + printf -- '- `%s`\n' "${missing_optional[@]}" + echo + echo "- `STAGING_BASE_URL`:${STAGING_BASE_URL}" + } >> "$GITHUB_STEP_SUMMARY" + else + { + echo "## 发布验收测试" + echo + echo "状态:配置检查通过" + echo + echo "- `STAGING_BASE_URL`:${STAGING_BASE_URL}" } >> "$GITHUB_STEP_SUMMARY" - exit 1 fi - name: 下载依赖模块 diff --git a/tests/acceptance/README.md b/tests/acceptance/README.md index 65a4eba..7afb09c 100644 --- a/tests/acceptance/README.md +++ b/tests/acceptance/README.md @@ -10,9 +10,11 @@ go test ./tests/acceptance/... -staging-url=https://tapi.hifast.biz Without credentials, tests that require admin/user login or NodeSecret are skipped and unauthenticated error-path checks still run. -## Required secrets +## Workflow configuration -The staging workflow should provide these values through GitHub Actions secrets or environment variables: +`STAGING_BASE_URL` should be provided through GitHub Actions secrets or variables. When omitted, the workflow falls back to `https://tapi.hifast.biz`. + +The following secrets are optional. When any of them are missing, the workflow still runs and the corresponding acceptance cases are skipped automatically: - `ACCEPTANCE_ADMIN_EMAIL` - `ACCEPTANCE_ADMIN_PASSWORD` @@ -24,7 +26,6 @@ The staging workflow should provide these values through GitHub Actions secrets - `STAGING_DB_NAME` - `STAGING_REDIS_ADDR` - `STAGING_REDIS_PASSWORD` -- `STAGING_BASE_URL` `ACCEPTANCE_NODE_SECRET` is optional. When DB credentials are present, the loader reads NodeSecret from the staging `system` table instead of storing it as a long-lived secret.