Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ jobs:
AWS_S3_KEY_PREFIX: "${{env.REPOSITORY_NAME}}/"
CANONICAL_LINK_PREFIX: ${{env.CANONICAL_LINK_PREFIX}}
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
OVERRIDE_SUBMODULE_SHA: ""

- name: Build and deploy document (HTML Pub repo)
uses: ./workflows
Expand Down
99 changes: 98 additions & 1 deletion workflows/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,111 @@ inputs:
required: true
GITHUB_TOKEN:
required: true
OFFICIAL_SUBMODULE_PATH:
required: false
default: tooling
OFFICIAL_SUBMODULE_URL:
required: false
default: https://github.com/SMPTE/html-pub.git
OFFICIAL_SUBMODULE_BRANCH:
required: false
default: main
OVERRIDE_SUBMODULE_SHA:
required: false
OVERRIDE_SUBMODULE_REF:
required: false

runs:
using: "composite"
steps:

- name: Confirm that the right workflow is active
shell: bash
run: cmp ${GITHUB_ACTION_PATH}/../.github/workflows/main.yml .github/workflows/main.yml
run: |
set -euo pipefail
REF="${GITHUB_ACTION_PATH}/../.github/workflows/main.yml"
LOC=".github/workflows/main.yml"
# Ignore override inputs so they don't trigger false diffs
diff -u \
<(grep -vE '^[[:space:]]*OVERRIDE_SUBMODULE_(SHA|REF):' "$REF") \
<(grep -vE '^[[:space:]]*OVERRIDE_SUBMODULE_(SHA|REF):' "$LOC")

- name: Enforce official submodule lock
shell: bash
env:
SUB_PATH: ${{ inputs.OFFICIAL_SUBMODULE_PATH }}
OFFICIAL_URL: ${{ inputs.OFFICIAL_SUBMODULE_URL }}
OFFICIAL_BRANCH: ${{ inputs.OFFICIAL_SUBMODULE_BRANCH }}
OVERRIDE_SHA: ${{ inputs.OVERRIDE_SUBMODULE_SHA }}
OVERRIDE_REF: ${{ inputs.OVERRIDE_SUBMODULE_REF }}
run: |
set -euo pipefail

# Skip enforcement when running inside the source repository itself.
if [[ "${GITHUB_REPOSITORY:-}" == "SMPTE/html-pub" ]]; then
echo "Submodule enforcement skipped in source repo (${GITHUB_REPOSITORY})."
exit 0
fi

if [[ -z "${SUB_PATH:-}" ]]; then
echo "ERROR: SUB_PATH is empty"; exit 1
fi

if [[ ! -f ".gitmodules" ]]; then
echo "ERROR: .gitmodules not found. This repository must declare the '${SUB_PATH}' submodule."
exit 1
fi

URL_IN_MODULES=$(git config -f .gitmodules --get "submodule.${SUB_PATH}.url" || true)
if [[ "$URL_IN_MODULES" != "$OFFICIAL_URL" ]]; then
echo "ERROR: ${SUB_PATH} URL in .gitmodules is '$URL_IN_MODULES' but must be '$OFFICIAL_URL'"
exit 1
fi

RECORDED_SHA=$(git ls-tree HEAD "$SUB_PATH" | awk '{print $3}')
if [[ -z "${RECORDED_SHA:-}" ]]; then
echo "ERROR: No submodule commit recorded for ${SUB_PATH}. Did you add and commit the submodule?"
exit 1
fi

if [[ -n "${OVERRIDE_SHA:-}" ]]; then
TARGET_SHA="$OVERRIDE_SHA"
elif [[ -n "${OVERRIDE_REF:-}" ]]; then
TARGET_SHA=$(git ls-remote "$OFFICIAL_URL" "$OVERRIDE_REF" | awk '{print $1}')
if [[ -z "${TARGET_SHA:-}" ]]; then
echo "ERROR: Could not read override ref '$OVERRIDE_REF' from '$OFFICIAL_URL'"
exit 1
fi
else
TARGET_SHA=$(git ls-remote "$OFFICIAL_URL" "refs/heads/$OFFICIAL_BRANCH" | awk '{print $1}')
if [[ -z "${TARGET_SHA:-}" ]]; then
echo "ERROR: Could not read '$OFFICIAL_BRANCH' from '$OFFICIAL_URL'"
exit 1
fi
fi

echo "Recorded(${SUB_PATH}): $RECORDED_SHA"
echo "Target (${SUB_PATH}): $TARGET_SHA"

if [[ "$RECORDED_SHA" != "$TARGET_SHA" ]]; then
if [[ -n "${OVERRIDE_SHA:-}" || -n "${OVERRIDE_REF:-}" ]]; then
echo "::warning::Submodule commit mismatch (override active). Recorded=${RECORDED_SHA} Target=${TARGET_SHA}"
# Do not exit; proceed to allow testing with override.
else
echo "ERROR: Submodule is not on latest official main."
echo
echo "To fix locally:"
echo " git submodule update --init --remote -- \"${SUB_PATH}\""
echo " # or explicitly:"
echo " cd \"${SUB_PATH}\""
echo " git fetch origin \"${OFFICIAL_BRANCH}\""
echo " git checkout --detach \"origin/${OFFICIAL_BRANCH}\""
echo " cd -"
echo " git add \"${SUB_PATH}\""
echo " git commit -m \"Bump ${SUB_PATH} to latest ${OFFICIAL_BRANCH}\""
exit 1
fi
fi

- name: Install vnu
shell: bash
Expand Down