diff --git a/.github/workflows/ci-docs.yml b/.github/workflows/ci-docs.yml index 142af5f..95695e8 100644 --- a/.github/workflows/ci-docs.yml +++ b/.github/workflows/ci-docs.yml @@ -1,19 +1,26 @@ name: CI - Docs build check on: - pull_request: - branches-ignore: - - gh-pages - push: + push: + branches: + - main + - develop + - release-candidate workflow_dispatch: permissions: contents: read +env: + MKDOCS_STRICT: ${{ vars.MKDOCS_STRICT || 'true' }} + MKDOCS_CONFIG: mkdocs/mkdocs.yml + MKDOCS_OFFLINE: false + CSPELL_CONFIG: tools/spellcheck/cspell.yml + CSPELL_TARGETS: docs/**/*.md README.md + jobs: build-check: runs-on: ubuntu-latest - steps: - name: Checkout uses: actions/checkout@v4 @@ -27,9 +34,8 @@ jobs: run: | set -euo pipefail npx --yes cspell \ - --config tools/spellcheck/cspell.yml \ - "docs/**/*.md" \ - README.md + --config ${CSPELL_CONFIG} \ + ${CSPELL_TARGETS} - name: Install build dependencies run: | @@ -37,8 +43,15 @@ jobs: pip install -r mkdocs/requirements.txt - name: MkDocs build (strict default) + run: | set -euo pipefail - # Default not strict on if unset - export MKDOCS_STRICT="${MKDOCS_STRICT:-true}" - tools/build.sh --config mkdocs/mkdocs.yml \ No newline at end of file + echo "Strict is set to ${MKDOCS_STRICT}" + FLAGS=() + + if [ "${MKDOCS_STRICT}" = "true" ]; then + FLAGS+=(--strict) + fi + MKDOCS_OUTPUT_DIR="${RUNNER_TEMP:-${TMPDIR:-/tmp}}/dist" + + mkdocs build "${FLAGS[@]}" -f "${MKDOCS_CONFIG}" -d "${MKDOCS_OUTPUT_DIR}" \ No newline at end of file diff --git a/.github/workflows/deploy-rc-pages.yml b/.github/workflows/deploy-rc-pages.yml deleted file mode 100644 index e749605..0000000 --- a/.github/workflows/deploy-rc-pages.yml +++ /dev/null @@ -1,102 +0,0 @@ -name: Deploy RC preview to GitHub Pages - -on: - push: - tags: ["v*"] - workflow_dispatch: - -permissions: - contents: write - -jobs: - deploy-rc-pages: - runs-on: ubuntu-latest - - steps: - - name: Guard - only run for RC tags; deploy only on GitHub - run: | - set -euo pipefail - TAG="${GITHUB_REF_NAME:-}" - CI_PROVIDER="${CI_PROVIDER:-github}" - ENABLE_DEPLOY="${ENABLE_DEPLOY:-false}" - - if [[ -z "$TAG" ]] || [[ "$TAG" != v* ]] || [[ "$TAG" != *"-rc"* ]]; then - echo "Not an RC tag ($TAG); skipping." - exit 0 - fi - if [[ "${ENABLE_DEPLOY}" != "true" ]]; then - echo "Skipping deploy: ENABLE_DEPLOY=${ENABLE_DEPLOY}" - exit 0 - fi - if [[ "${ACT:-false}" == "true" ]]; then - echo "Skipping deploy: act" - exit 0 - fi - if [[ "${CI_PROVIDER}" != "github" ]]; then - echo "Skipping deploy: CI_PROVIDER=${CI_PROVIDER}" - exit 0 - fi - - - name: Checkout (tag) - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup Python - uses: actions/setup-python@v5 - with: - python-version: "3.11" - - - name: Install dependencies - run: | - set -euo pipefail - pip install -r mkdocs/requirements.txt - - - name: Build site (strict default) - run: | - set -euo pipefail - export MKDOCS_STRICT="${MKDOCS_STRICT:-true}" - export TMPDIR="${RUNNER_TEMP:-$TMPDIR}" - export OUTPUT_DIR="${OUTPUT_DIR:-${TMPDIR}/dist/}" - tools/build.sh --config mkdocs/mkdocs.yml - - - name: Checkout gh-pages branch - run: | - set -euo pipefail - git fetch origin gh-pages:gh-pages || true - if git show-ref --verify --quiet refs/heads/gh-pages; then - git switch gh-pages - else - git switch --orphan gh-pages - rm -rf ./* - git config user.name "github-actions[bot]" - git config user.email "github-actions[bot]@users.noreply.github.com" - git commit --allow-empty -m "Initialize gh-pages" - fi - - - name: Publish RC preview under /rc// - run: | - export MKDOCS_STRICT="${MKDOCS_STRICT:-true}" - export TMPDIR="${RUNNER_TEMP:-$TMPDIR}" - export OUTPUT_DIR="${OUTPUT_DIR:-${TMPDIR}/dist/}" - - set -euo pipefail - REF="${GITHUB_REF_NAME}" - mkdir -p "rc/${REF}" - rm -rf "rc/${REF:?}/"* || true - cp -a "$OUTPUT_DIR" "rc/${REF}/" - - mkdir -p rc - if [ ! -f rc/index.html ]; then - cat > rc/index.html << 'EOF' - RC Previews -

Release Candidate Preview

-

${REF:?}

- EOF - fi - - git add -A - git config user.name "github-actions[bot]" - git config user.email "github-actions[bot]@users.noreply.github.com" - git commit -m "Deploy RC preview ${REF}" || echo "No changes to commit" - git push origin gh-pages \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..9c3d8bd --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,114 @@ +name: Build & publish docs (rc + release) + +on: + push: + tags: + - "rc*" + - "v*" + workflow_dispatch: + +permissions: + contents: write + +env: + MKDOCS_CONFIG: mkdocs/mkdocs.yml + MKDOCS_STRICT: ${{ vars.MKDOCS_STRICT || 'true' }} + +jobs: + publish: + runs-on: ubuntu-latest + + steps: + - name: Checkout (tag) + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: "3.11" + + - name: Install deps + run: | + set -euo pipefail + pip install -r mkdocs/requirements.txt + + - name: Build docs (normal + offline, strict gate) + run: | + set -euo pipefail + + FLAGS=() + if [ "${MKDOCS_STRICT}" = "true" ]; then + FLAGS+=(--strict) + fi + + OUT_BASE="${RUNNER_TEMP}/mkdocs_out" + SITE="${OUT_BASE}/site" + SITE_OFFLINE="${OUT_BASE}/site_offline" + + rm -rf "${OUT_BASE}" + mkdir -p "${SITE}" "${SITE_OFFLINE}" + + mkdocs build "${FLAGS[@]}" -f "${MKDOCS_CONFIG}" -d "${SITE}" + OFFLINE=true mkdocs build "${FLAGS[@]}" -f "${MKDOCS_CONFIG}" -d "${SITE_OFFLINE}" + + - name: Zip offline site + run: | + set -euo pipefail + cd "${RUNNER_TEMP}/mkdocs_out" + zip -r "${GITHUB_REF_NAME}.zip" site_offline + + - name: Publish prerelease + if: startsWith(github.ref_name, 'rc') + uses: softprops/action-gh-release@v2 + with: + prerelease: true + name: ${{ github.ref_name }} + tag_name: ${{ github.ref_name }} + body: | + Release candidate preview (if deployed): /rc/ + files: | + ${{ runner.temp }}/mkdocs_out/${{ github.ref_name }}.zip + + - name: Publish release + if: startsWith(github.ref_name, 'v') + uses: softprops/action-gh-release@v2 + with: + name: ${{ github.ref_name }} + tag_name: ${{ github.ref_name }} + files: | + ${{ runner.temp }}/mkdocs_out/${{ github.ref_name }}.zip + + - name: Checkout gh-pages branch + uses: actions/checkout@v4 + with: + ref: gh-pages + fetch-depth: 0 + + - name: Deploy release to gh-pages root + if: startsWith(github.ref_name, 'v') + run: | + set -euo pipefail + rm -rf ./* + cp -a ${RUNNER_TEMP}/mkdocs_out/site/. . + git add -A + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git commit -m "Deploy release ${GITHUB_REF_NAME}" || echo "No changes to commit" + git push origin gh-pages + + - name: Deploy RC preview to /rc/ + if: startsWith(github.ref_name, 'rc') + run: | + set -euo pipefail + rm -rf rc + mkdir -p rc + cp -a ${RUNNER_TEMP}/mkdocs_out/site/. rc/ + printf '{"tag":"%s"}\n' "${GITHUB_REF_NAME}" > rc/rc.json + + git add -A + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git commit -m "Deploy RC preview ${GITHUB_REF_NAME}" || echo "No changes to commit" + git push origin gh-pages \ No newline at end of file diff --git a/metadata.yml b/metadata.yml deleted file mode 100644 index efa2263..0000000 --- a/metadata.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- - title: Chicago Metropolitan Baseball Association - subtitle: Constitution and By-Laws - date: 2024-06-06 ---- \ No newline at end of file diff --git a/mkdocs/mkdocs.yml b/mkdocs/mkdocs.yml index b67e623..7320cf8 100644 --- a/mkdocs/mkdocs.yml +++ b/mkdocs/mkdocs.yml @@ -36,4 +36,8 @@ plugins: - enumerate-headings: toc_depth: 2 exclude: - - index.md \ No newline at end of file + - index.md + +validation: + links: + anchors: warn #this defaults to info, but it will cause broken links in anchor headers \ No newline at end of file diff --git a/tools/build.sh b/tools/build.sh index b6b7917..6cf32f8 100755 --- a/tools/build.sh +++ b/tools/build.sh @@ -11,5 +11,5 @@ STRICT_FLAG="" if [ "${MKDOCS_STRICT}" = "true" ]; then STRICT_FLAG="--strict" fi - +echo "MKDOCS_STRICT: $MKDOCS_STRICT, STRICT_FLAG: $STRICT_FLAG" mkdocs build ${STRICT_FLAG} -f $MKDOCS_CONFIG -d $OUTPUT_DIR \ No newline at end of file