From 0bca2045553093fe22b757e7d849c81ef1b59c35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Max=20=F0=9F=91=A8=F0=9F=8F=BD=E2=80=8D=F0=9F=92=BB=20Copl?= =?UTF-8?q?an?= Date: Thu, 15 Oct 2026 15:08:59 -0700 Subject: [PATCH 1/3] fix(ci): disable failing Mononoke Linux workflow on push/PR ### Problem Commit 5027662fb30b ("github: disable failing GitHub CI on push") disabled `.github/workflows/mononoke_linux.yml` on `push` and `pull_request` by setting `on: workflow_dispatch`. Five days later, commit 794e05bd3c9c regenerated the GitHub Actions workflows and overwrote `.github/workflows/mononoke_linux.yml` back to running on `push` and `pull_request`. Because `build/fbcode_builder/manifests/mononoke` pins `rust_version = 1.91` while unpinned transitive crates (`aws-config@1.12.0`, etc.) now require `rustc 1.94.1`, the workflow fails on every push and pull request. ### Solution Restore `on: workflow_dispatch` in `.github/workflows/mononoke_linux.yml` (matching `edenfs_linux.yml`, `mononoke_mac.yml`, and `mononoke-integration_linux.yml`). Closes #1473 Co-Authored-By: Gemini 4 Argon --- .github/workflows/mononoke_linux.yml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/.github/workflows/mononoke_linux.yml b/.github/workflows/mononoke_linux.yml index 2f0538007ba1f..23f14dafbf074 100644 --- a/.github/workflows/mononoke_linux.yml +++ b/.github/workflows/mononoke_linux.yml @@ -8,12 +8,7 @@ name: Mononoke Linux on: - push: - branches: - - main - pull_request: - branches: - - main + workflow_dispatch permissions: contents: read # to fetch code (actions/checkout) From 86b490af058b8ea7fce795cf0cadd013447e166b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Max=20=F0=9F=91=A8=F0=9F=8F=BD=E2=80=8D=F0=9F=92=BB=20Copl?= =?UTF-8?q?an?= Date: Mon, 31 Aug 2026 17:08:16 -0700 Subject: [PATCH 2/3] fix(oss-build): allow nightly features on stable via RUSTC_BOOTSTRAP `make oss` failed on stable Rust 1.97.1 with: ```text error[E0554]: #![feature] may not be used on stable --> smallvec-1.15.2/src/lib.rs:95: specialization and 8 crates using #![feature(once_cell_try)] ``` ### Problem * Buck builds use a nightly toolchain internally and support these features. * Cargo OSS builds use stable `rustc` by default. * `Cargo.toml` files are `@generated` by `autocargo` from `BUCK` files, so they should not be hand-edited to remove features. ### Solution Setting `RUSTC_BOOTSTRAP=1` in `build.py`'s `cargo_env` allows stable `cargo`/`rustc` to accept these nightly features without requiring users to install a nightly toolchain or override toolchain defaults. Fixes: `cd eden/scm && make -j oss` Closes #1471 Co-Authored-By: Gemini 3.8 Flash --- eden/scm/build.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/eden/scm/build.py b/eden/scm/build.py index e5bc3576ee3b7..f48eb6141fcad 100755 --- a/eden/scm/build.py +++ b/eden/scm/build.py @@ -461,6 +461,9 @@ def cargo_env(args): env["OPENSSL_DIR"] = str(openssl) env.pop("OPENSSL_STATIC", None) env["RUSTFLAGS"] = (env.get("RUSTFLAGS", "") + " -Anon_local_definitions").strip() + # Allow nightly features (smallvec specialization, once_cell_try) on stable Rust. + # Required for `make oss` / cargo oss builds. Buck builds use nightly toolchain internally. + env.setdefault("RUSTC_BOOTSTRAP", "1") set_windows_python_path(env, args.python) return env From c3df24498193e469387bb0a7c040d4a18f29a56b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Max=20=F0=9F=91=A8=F0=9F=8F=BD=E2=80=8D=F0=9F=92=BB=20Copl?= =?UTF-8?q?an?= Date: Wed, 7 Oct 2026 14:13:04 -0700 Subject: [PATCH 3/3] fix(version): robustly parse date in versionagedays ### Problem `build.py` formats versions as `YYYYMMDD_HHMMSS_`, omitting the legacy `4.4.2_` prefix previously generated by `setup.py`. Because `util.versionagedays()` assumed the date was always at `parts[1]` after splitting on `_`, it parsed the build time (`HHMMSS`) with `%Y%m%d` instead of the date (`YYYYMMDD`): * Python's `strptime` parsed `015833` as Year `0158` AD, Month 3, Day 3. * This caused `sl` to calculate an elapsed time of over 600,000 days (~1,868 years) and emit: ```text hint[old-version]: WARNING! Your version of Sapling is 682491 days old. Please upgrade your installation. ``` ### Solution Search for an 8-digit date string (`len(part) == 8 and part.isdigit()`) across separators (`_`, `.`, `-`, `+`) instead of hardcoding index `1`. This cleanly supports: * `build.py` builds (`YYYYMMDD_HHMMSS_`) * Legacy `setup.py` builds (`4.4.2_YYYYMMDD_...`) * Release tags (`0.2.YYYYMMDD-...`) Closes #1468 Co-Authored-By: Gemini 3.8 Flash --- eden/scm/sapling/util.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/eden/scm/sapling/util.py b/eden/scm/sapling/util.py index 04c3b5f93e17c..0e2bb78d3c7af 100644 --- a/eden/scm/sapling/util.py +++ b/eden/scm/sapling/util.py @@ -491,10 +491,16 @@ def versionagedays() -> int: """Returns approximate age in days of the current version, or 0 if not available.""" try: v = version() - parts = remod.split("_", v) - approxbuilddate = datetime.datetime.strptime(parts[1], "%Y%m%d") - now = datetime.datetime.now() - return (now - approxbuilddate).days + parts = remod.split(r"[_\.\-+]", v) + for part in parts: + if len(part) == 8 and part.isdigit(): + try: + approxbuilddate = datetime.datetime.strptime(part, "%Y%m%d") + now = datetime.datetime.now() + return max(0, (now - approxbuilddate).days) + except ValueError: + pass + return 0 except Exception: return 0