From c04cba5b5104a13b1eb24af245f1089ff9198eab Mon Sep 17 00:00:00 2001 From: shenxianpeng Date: Tue, 4 Aug 2026 08:19:21 +0300 Subject: [PATCH] fix: restore the CI workflow and gitignore lost in the first push The initial commit landed without any dotfile-prefixed paths, so the repository has no CI at all: pushes to main neither build the site nor deploy it, and pull requests run no checks. Restores the deploy workflow, the dependabot config and the gitignore. Untracks the two .pyc files that were committed as a side effect of the missing gitignore. --- .github/dependabot.yml | 15 ++++ .github/workflows/deploy.yml | 81 ++++++++++++++++++ .gitignore | 15 ++++ .../__pycache__/mkdocs_hooks.cpython-311.pyc | Bin 2575 -> 0 bytes ...ocs_sync_test.cpython-311-pytest-9.1.1.pyc | Bin 18333 -> 0 bytes 5 files changed, 111 insertions(+) create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/deploy.yml create mode 100644 .gitignore delete mode 100644 scripts/__pycache__/mkdocs_hooks.cpython-311.pyc delete mode 100644 tests/__pycache__/docs_sync_test.cpython-311-pytest-9.1.1.pyc diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..203f271 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,15 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: github-actions + directory: / + schedule: + interval: "weekly" + groups: + actions: + patterns: + - "*" diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..c2c6b27 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,81 @@ +name: Deploy site + +on: + push: + branches: [main] + pull_request: + branches: [main] + workflow_dispatch: + +permissions: + contents: read + +jobs: + # The reference pages describe behaviour that lives in the commit-check + # repository, so they can drift without anything here changing. This job + # reads both and fails when they disagree. + docs-sync: + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v7 + with: + persist-credentials: false + + - uses: actions/setup-python@v7 + with: + python-version: '3.x' + + # Installed from main rather than PyPI: the site documents rule IDs that + # are merged but not yet released, so the published package would report + # a spurious mismatch. Switch this to the released package once a version + # carrying them is on PyPI. + - name: Install commit-check from main + run: | + python -m pip install --upgrade pip + python -m pip install pytest + python -m pip install "commit-check @ git+https://github.com/commit-check/commit-check@main" + + - name: Check the docs against the package + run: pytest tests/ -q + + build: + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v7 + with: + persist-credentials: false + + - uses: actions/setup-python@v7 + with: + python-version: '3.x' + + # The social plugin renders the share cards through cairo, which cairosvg + # loads at runtime rather than bundling. + - name: Install cairo + run: sudo apt-get install -y --no-install-recommends libcairo2 + + - name: Build site + run: pipx run nox -s docs + + - name: Upload site as pages artifact + uses: actions/upload-pages-artifact@v5 + with: + name: ${{ github.event.repository.name }}_site + path: ${{ github.workspace }}/site + + deploy: + if: github.ref == 'refs/heads/main' + runs-on: ubuntu-24.04 + needs: [build] + permissions: + pages: write + id-token: write + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v5 + with: + artifact_name: ${{ github.event.repository.name }}_site diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..865942c --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +# Build output +site/ + +# Social card cache +.cache/ + +# Python +__pycache__/ +*.py[cod] +.nox/ +.venv/ + +# OS +.DS_Store +Thumbs.db diff --git a/scripts/__pycache__/mkdocs_hooks.cpython-311.pyc b/scripts/__pycache__/mkdocs_hooks.cpython-311.pyc deleted file mode 100644 index a7bc3e181a6cd4d5bd64c5f9dbfb0bf7d8964076..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2575 zcmZ`)&2JmW6<>ZW$z4*GKhib|5{xLs5N$2jiW0+4NEJq;qyZc`kWv&;YS7D_A$QE> z?s{e@S+p1kMS!M7f$C5ohb91XaT7R)9P=mSC>a7wED#`Q(L--6++KX@n2v zHWTnpy2(~*GX=I3R&g3TF@h;0wm@98YaG>mhJ-`VojWB*wA?#)(685T^2p>f z+Mu50qK&|z-hITWAczyTMeqXRzUES|$&uwUV&NSWv}-Qq4#9}HoNPOU5!56kK-)fR zQm=u04nRNmv}x`tZZ!&H3%ykRJ8G=nXe3316nXfVLfKI{*#$ zT?ng202PAj)FsFT@Y;c9c^KK2=lKHJzUxv<&^8rLgi|0Rl-dpw7Hbeu(*7l@T#SW! zw8RqB_xKu&lkZu==}g(aSEr3OizdvD%GxgBW+y}LTdlw)W=Ct$#_?=kFdwib9O@`w zN&?g%uHP^_xov>bpxp4tw%K_RTnj+j;1Gr&*rXn4t~>M+Dn&iapYj~0BFABRCzX-7ZdGtAg7twPQ`On?@u>#H|b-dznd4dPJ`ll$!fG-G)d`?lB#2$CJP ztd->pxsXMrK)ix9KnKCAMTCXG6XQfw3T;t0uE|+Jg-e##M|}$k{(bLZ*&JH6vg|^r zoLebCeSDAFmRmp$BlSw*L7TZ-qAW!?*D%7|z)FHEla z9#39PC)z_$AB~4A%I)Rfg8y!^ zo7#=#g90@6lUZFP=(tgOs}oJfAgKUJ_wV7 zwaMCO2Ab(v%s={5YP58oZh0wB;aA(=fFJP7G=H{CV;!3Z@7Si z8tOM!-@ftY2UUn^BTRwQ77w*;8Gluf`y$M&udckazWV0-p$bIZvP4l0)giNmYI8f{ zqofQrOx7$;Le(V=%iamq;UVI(YAAZ1-7`fiFyZ!SV`5w}4aaX01M+6(tBcp|>q~gi zuu1)z@!HZ=%ea31O5IpmdKE9$78kF+RwwefS;BS#3!Apzg8S959bz|2Fc=+0Znm00 zf4n-pg@c_i?|an%_@Wx!&g>EdQ-**39f&>UpZb}7b-!~oT{zU|j`X>`mH+0HjP`No z_aFW4qkVdqMn`GXd+Txf(n0!CKQr}-I#8AT`Tf_AaxWd^Uhd63(T&Ht@uhvJzjCC% z^3BGfer<2%`l+Hg}*DPX2ySvU|~AU-`ws>E9ru{On>s|6Kpf z^Zm0g_Aksyd43kKJv-aiU+7O6{poXq7pBg{2MUNieXwvom)y$?7N%o>z)y%M>i+?! CgX?bq diff --git a/tests/__pycache__/docs_sync_test.cpython-311-pytest-9.1.1.pyc b/tests/__pycache__/docs_sync_test.cpython-311-pytest-9.1.1.pyc deleted file mode 100644 index 3b9b5174e4feb565d44fa756cc6cd1fe4a392051..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18333 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