diff --git a/.github/workflows/build-site.yml b/.github/workflows/build-site.yml index ada4ec41..dc551a94 100644 --- a/.github/workflows/build-site.yml +++ b/.github/workflows/build-site.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out the code - uses: actions/checkout@v6 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Fetch main run: | @@ -23,7 +23,7 @@ jobs: git branch - name: Setup Ruby - uses: ruby/setup-ruby@v1 + uses: ruby/setup-ruby@6aaa311d81eba98ae12eaffbcb63296ace0efcde # v1.307.0 with: bundler-cache: true # runs 'bundle install' and caches installed gems automatically @@ -32,12 +32,21 @@ jobs: env: JEKYLL_ENV: production + - name: Restore lychee cache + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + with: + path: .lycheecache + key: cache-lychee-${{ hashFiles('lychee.toml', '.lycheeignore') }}-${{ github.sha }} + restore-keys: | + cache-lychee-${{ hashFiles('lychee.toml', '.lycheeignore') }}- + cache-lychee- + - name: Check links with lychee id: lychee uses: lycheeverse/lychee-action@8646ba30535128ac92d33dfc9133794bfdd9b411 #v2.8.0 with: fail: true - args: --no-progress --root-dir _site --exclude 'zenodo\.org' --accept '200..=403' _site + args: --root-dir _site _site env: GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} diff --git a/.github/workflows/linkcheck.yml b/.github/workflows/linkcheck.yml index ff842494..a5b32738 100644 --- a/.github/workflows/linkcheck.yml +++ b/.github/workflows/linkcheck.yml @@ -19,7 +19,7 @@ jobs: git branch - name: Setup Ruby - uses: ruby/setup-ruby@6ca151fd1bfcfd6fe0c4eb6837eb0584d0134a0c #v1.290.0 + uses: ruby/setup-ruby@6aaa311d81eba98ae12eaffbcb63296ace0efcde # v1.307.0 with: bundler-cache: true # runs 'bundle install' and caches installed gems automatically @@ -28,22 +28,28 @@ jobs: env: JEKYLL_ENV: production + - name: Restore lychee cache + uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5 + with: + path: .lycheecache + key: cache-lychee-${{ hashFiles('lychee.toml', '.lycheeignore') }}-${{ github.sha }} + restore-keys: | + cache-lychee-${{ hashFiles('lychee.toml', '.lycheeignore') }}- + cache-lychee- + - name: Link Checker id: lychee uses: lycheeverse/lychee-action@8646ba30535128ac92d33dfc9133794bfdd9b411 #v2.8.0 with: args: > - --no-progress --root-dir ${{ github.workspace }}/_site - --exclude 'zenodo\.org' - --accept '200..=403' _site env: GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} - name: Create Issue From File if: env.lychee_exit_code != 0 - uses: peter-evans/create-issue-from-file@v6 + uses: peter-evans/create-issue-from-file@fca9117c27cdc29c6c4db3b86c48e4115a786710 # v6.0.0 with: title: Link Checker Report content-filepath: ./lychee/out.md diff --git a/.gitignore b/.gitignore index f081da17..8b5bb863 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ node_modules/* .hugo_build.lock public/ resources/ +.lycheecache diff --git a/_posts/2024-05-14-pyos-guide-to-pyconus-2024.md b/_posts/2024-05-14-pyos-guide-to-pyconus-2024.md index f9cd9925..27fe4fe2 100644 --- a/_posts/2024-05-14-pyos-guide-to-pyconus-2024.md +++ b/_posts/2024-05-14-pyos-guide-to-pyconus-2024.md @@ -41,7 +41,7 @@ Henry will be guiding attendees through how easy it is now to set up a binary ex ### 2:45--3:15 PM: Hatch: The only tool you need *Ballroom A*\ **[Ofek Lev](https://github.com/ofek)**\ -It's no secret that we're big fans of Hatch---we even [taught a Python Packaging Workshop](https://www.pyopensci.org/blog/pyos-education-announcement.html#enroll-in-pyopenscis-upcoming-workshop-from-python-code-to-module) using [Hatch](https://hatch.pypa.io/latest/)! With an ever-growing set of tools used in Python packaging, Ofek will be presenting on how Hatch can be used as a unifying tool for Python packaging. +It's no secret that we're big fans of Hatch---we even [taught a Python Packaging Workshop](https://www.pyopensci.org/blog/pyos-education-announcement.html) using [Hatch](https://hatch.pypa.io/latest/)! With an ever-growing set of tools used in Python packaging, Ofek will be presenting on how Hatch can be used as a unifying tool for Python packaging. ## Saturday, May 18th ### 9:00--9:25 AM: Diversity & Inclusion Panel diff --git a/_posts/2024-08-30-pyopensci-monumental-growth-2024.md b/_posts/2024-08-30-pyopensci-monumental-growth-2024.md index 0c0fcdcc..b7d1ead5 100644 --- a/_posts/2024-08-30-pyopensci-monumental-growth-2024.md +++ b/_posts/2024-08-30-pyopensci-monumental-growth-2024.md @@ -157,8 +157,8 @@ The pyOpenSci packaging guide provides an overview of the Python packaging ecosy * [build backend](https://www.pyopensci.org/python-package-guide/package-structure-code/python-package-build-tools.html#build-back-ends), * [build frontend](https://www.pyopensci.org/python-package-guide/package-structure-code/python-package-build-tools.html#python-package-build-front-ends), -* [wheel](https://www.pyopensci.org/python-package-guide/package-structure-code/python-package-distribution-files-sdist-wheel.html#wheel-whl-files), and -* [sdist](https://www.pyopensci.org/python-package-guide/package-structure-code/python-package-distribution-files-sdist-wheel.html#source-distribution-sdist). +* [wheel](https://www.pyopensci.org/python-package-guide/package-structure-code/python-package-distribution-files-sdist-wheel.html), and +* [sdist](https://www.pyopensci.org/python-package-guide/package-structure-code/python-package-distribution-files-sdist-wheel.html). Our Python Packaging Guide aims to translate the technical jargon that gets in the way of new users having a successful packaging experience. Over time, we hope that this will make packaging less confusing and more accessible to more people. diff --git a/_posts/2025-07-24-scipy-2025-recap.md b/_posts/2025-07-24-scipy-2025-recap.md index b8ebf940..be403e43 100644 --- a/_posts/2025-07-24-scipy-2025-recap.md +++ b/_posts/2025-07-24-scipy-2025-recap.md @@ -39,7 +39,7 @@ We love Hatch because it includes a task runner out of the box (see [the Scienti Shoutout to [Carol Willing](https://github.com/willingc), [Inessa Pawson](https://github.com/InessaPawson), [Jeremiah Paige](https://github.com/ucodery), and [Tetsuo Koyama](https://github.com/tkoyama010) for making this workshop such a success. -We also attended the Pixi workshop, which showcased how [Pixi](https://pixi.sh) utilizes UV and supports mixed [PyPI](https://pypi.org/)/[Conda](https://docs.conda.io/projects/conda/en/latest/user-guide/getting-started.html#managing-python) environments. The instructors walked us through spinning up cloud-based GPU compute using [NVIDIA Brev,](https://developer.nvidia.com/brev) which was quick, powerful, and surprisingly easy to configure. Pixi is a great option for you if you want the speed of UV but the Conda support! +We also attended the Pixi workshop, which showcased how [Pixi](https://pixi.sh) utilizes UV and supports mixed [PyPI](https://pypi.org/)/[Conda](https://docs.conda.io/projects/conda/en/latest/user-guide/getting-started.html) environments. The instructors walked us through spinning up cloud-based GPU compute using [NVIDIA Brev,](https://developer.nvidia.com/brev) which was quick, powerful, and surprisingly easy to configure. Pixi is a great option for you if you want the speed of UV but the Conda support!
diff --git a/lychee.toml b/lychee.toml new file mode 100644 index 00000000..bf876392 --- /dev/null +++ b/lychee.toml @@ -0,0 +1,63 @@ +# Lychee link-checker config for pyopensci.org +# Docs: https://lychee.cli.rs/ +# +# Domain-level skips live in .lycheeignore. +# CI may pass additional flags via .github/workflows/linkcheck.yml +# (e.g. --root-dir $GITHUB_WORKSPACE/_site). + +############################# Display ############################## + +# Log verbosity: error | warn | info | debug | trace +verbose = "info" + +# Report format. +format = "detailed" + +# Suppress the interactive progress bar (CI-friendly). +no_progress = true + +############################# Cache ################################ + +# Cache responses between runs. +cache = true +max_cache_age = "1d" + +# Never cache server errors so transient 5xx don't stick. +cache_exclude_status = "500.." + +############################# Runtime ############################## + +max_concurrency = 14 +max_redirects = 10 +max_retries = 2 +# Wait longer between retries to give slow servers room to recover. +retry_wait_time = 5 +# Generous timeout for slow-but-healthy servers (academic mirrors, DOIs). +timeout = 45 + +############################# Requests ############################# + +# Some sites block lychee's default UA. Use a generic browser-ish UA. +user_agent = "Mozilla/5.0 (compatible; lychee-link-checker)" + +# Accept 200–403 as success. 401/403 are common on bot-protected or +# auth-walled pages we still want to consider "reachable". +accept = ["200..=403"] + +# Enable the checking of fragments in links. +include_fragments = false + +# Only test links with the given schemes (e.g. https). +# At the moment, we support http, https, file, and mailto. +scheme = ["https", "file"] + + +############################# Exclusions ########################### + +# Don't check URLs that only appear inside /
 blocks.
+include_verbatim = false
+
+# Regex excludes. Plain-domain skips belong in .lycheeignore.
+exclude = [
+    'zenodo\.org',
+]