diff --git a/.github/actions/pana-score/README.md b/.github/actions/pana-score/README.md index 624797a..b6ca4af 100644 --- a/.github/actions/pana-score/README.md +++ b/.github/actions/pana-score/README.md @@ -34,8 +34,9 @@ publishing its status and summary. - `score`: e.g. `98/100`. - `state`: one of `success`, `failure`, `error`. -- `package-name`: resolved from the package's `pubspec.yaml` (or its directory - name), used to namespace the commit status context. +- `package-name`: resolved from the package's `pubspec.yaml` (falling back to + its directory name, then `unknown`), used to namespace the commit status + context. Always set, even if the score step itself fails. ## Required workflow permissions diff --git a/.github/actions/pana-score/action.yaml b/.github/actions/pana-score/action.yaml index 323e524..8138be5 100644 --- a/.github/actions/pana-score/action.yaml +++ b/.github/actions/pana-score/action.yaml @@ -44,12 +44,18 @@ runs: PACKAGE_PATH: ${{ inputs.path }} run: | set -euo pipefail # so tee doesn't mask a pana that fell over - pana --json "$PACKAGE_PATH" | tee "$RUNNER_TEMP/pana.json" || true - package_name="$(awk -F': *' '/^name:/{print $2; exit}' "$PACKAGE_PATH/pubspec.yaml" 2>/dev/null | tr -d "\"'")" + # resolved first and shielded from set -e so a later crash still reports a name + package_name="$(awk -F': *' '/^name:/{print $2; exit}' "$PACKAGE_PATH/pubspec.yaml" 2>/dev/null | tr -d "\"'")" || true + if [ -z "$package_name" ]; then + package_name="$(basename "$(cd "$PACKAGE_PATH" && pwd)" 2>/dev/null)" || true + fi if [ -z "$package_name" ]; then - package_name="$(basename "$(cd "$PACKAGE_PATH" && pwd)")" + package_name="unknown" fi + echo "package-name=$package_name" >> "$GITHUB_OUTPUT" + + pana --json "$PACKAGE_PATH" | tee "$RUNNER_TEMP/pana.json" || true granted="$(jq -r '.scores.grantedPoints // empty' "$RUNNER_TEMP/pana.json" 2>/dev/null || true)" max="$(jq -r '.scores.maxPoints // empty' "$RUNNER_TEMP/pana.json" 2>/dev/null || true)" @@ -74,7 +80,6 @@ runs: echo "score=$score" >> "$GITHUB_OUTPUT" echo "state=$state" >> "$GITHUB_OUTPUT" echo "valid_score=$valid_score" >> "$GITHUB_OUTPUT" - echo "package-name=$package_name" >> "$GITHUB_OUTPUT" { echo "## pana score for $package_name: $score" @@ -108,12 +113,21 @@ runs: STATE: ${{ steps.score.outputs.state || 'error' }} SCORE: ${{ steps.score.outputs.score || 'pana produced no score' }} PACKAGE_NAME: ${{ steps.score.outputs.package-name }} + PACKAGE_PATH: ${{ inputs.path }} TARGET_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} run: | - context="pana" - if [ -n "$PACKAGE_NAME" ]; then - context="pana ($PACKAGE_NAME)" + # re-resolved in case the score step was skipped entirely + package_name="$PACKAGE_NAME" + if [ -z "$package_name" ]; then + package_name="$(awk -F': *' '/^name:/{print $2; exit}' "$PACKAGE_PATH/pubspec.yaml" 2>/dev/null | tr -d "\"'")" || true + fi + if [ -z "$package_name" ]; then + package_name="$(basename "$(cd "$PACKAGE_PATH" && pwd)" 2>/dev/null)" || true + fi + if [ -z "$package_name" ]; then + package_name="unknown" fi + context="pana ($package_name)" gh api "repos/$GITHUB_REPOSITORY/statuses/$SHA" \ --silent \