Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
437 commits
Select commit Hold shift + click to select a range
353e706
chore: update changelog with 1.8.5 notes, fix 1.8 links (#3626)
rickeylev Feb 23, 2026
06aa36d
feat(pypi): make whl_library reproducible under pipstar (#3589)
aignas Feb 23, 2026
a91a4d5
fix(pypi): handle unnormalized package names when extracting sdist ve…
aignas Feb 25, 2026
a8741eb
fix: replace 2 bare except clauses with except Exception (#3637)
haosenwang1018 Feb 26, 2026
82f78b3
chore: simplify support policy description (#3638)
rickeylev Feb 26, 2026
bc64f06
refactor(pypi): factor out a simple implementation of the PyPI cache …
aignas Feb 27, 2026
0351baa
fix(pypi): update pypi tooling deps to setuptools 82, packaging 26 (#…
Danielkonge Feb 27, 2026
c91d9f0
build: add flag_alias definition for Starlarkification of python fla…
aranguyen Feb 27, 2026
2be0dd9
fix: remove flag_aliases to unbreak bazel 9 (#3649)
rickeylev Mar 5, 2026
612ca2e
chore: cleanup the usage of rctx.getenv (#3640)
aignas Mar 5, 2026
6c05d2d
ci: soft fail for upcoming bazel job (#3651)
rickeylev Mar 7, 2026
67ec8d5
fix: Fix zipapp compression support for new `py_zipapp_binary` target…
nate-england Mar 7, 2026
7ca9e3f
fix(toolchain): Also set Make variables for local toolchains (#3641)
jwnimmer-tri Mar 7, 2026
8c2cae6
refactor(pypi): move absolute_url to whl_library (#3652)
aignas Mar 8, 2026
be2f16e
tests: add bazel 9 testing, use latest released (not rc) for bazel (#…
rickeylev Mar 10, 2026
2c50daf
chore: use bazel 9 by default (#3662)
rickeylev Mar 13, 2026
d1279c3
Link a quickstart screen recording for rules_python beginners into do…
blockjon Mar 13, 2026
32e331b
chore!: enable --windows_enable_symlinks by default (#3663)
rickeylev Mar 14, 2026
798df3f
fix(pypi): return yank reason from SimpleAPI HTML (#3656)
aignas Mar 14, 2026
3ed161f
feat(pypi): store PyPI results as facts v2 (#3654)
aignas Mar 14, 2026
ad95ea0
chore: remove pip_repository_annotations example (#3622)
rickeylev Mar 14, 2026
9369ac3
chore: factor release note checking into separate script (#3628)
rickeylev Mar 14, 2026
7df7bd5
fix: prevent stdlib pyc files from invalidating runtime repos (#3661)
rickeylev Mar 14, 2026
54d372a
chore: split sphinxdocs into its own module (#3629)
rickeylev Mar 14, 2026
73cad42
chore: use term runfiles root instead of module space (#3664)
rickeylev Mar 15, 2026
2d7ff9d
chore: clarify type of paths for some system_python variables (#3665)
rickeylev Mar 15, 2026
77a89a6
feat: Allow files in wheels to be installed to directories (#3233)
Ahajha Mar 15, 2026
c9bb66e
fix(bootstrap): manual runfiles path construction when using submodul…
faximan Mar 16, 2026
eb1ae41
chore(system_python): use snake_case, add some debugging (#3667)
rickeylev Mar 16, 2026
f5f35d6
fix(pypi): propagate fails if overrides are passed only one index is …
aignas Mar 20, 2026
41fccfd
fix(pypi) Correct likely _BAZEL_REPO_FILE_GLOBS typo (#3670)
michaelm-openai Mar 20, 2026
d0b9baa
refactor!: create full venv for bootstrap=system_python (#3473)
rickeylev Mar 21, 2026
3976594
build(deps): bump the pip group across 2 directories with 1 update (#…
dependabot[bot] Mar 30, 2026
293e643
build(deps): bump cryptography from 46.0.5 to 46.0.6 in /tools/publis…
dependabot[bot] Mar 30, 2026
900d557
feat(pypi): first check index contents before downloading metadata ab…
aignas Apr 2, 2026
782ae91
fix(uv): drop powerpc64 support to fix latest version downloads (#3678)
aignas Apr 3, 2026
df7a168
fix(bootstrap) handle when the runfiles env vars are not correct (#3644)
adhoc-bobcat Apr 3, 2026
6d38770
feat(zipapp): support EXTRACT_ROOT env var for __main__.py invocation…
rickeylev Apr 5, 2026
2c5616b
feat(zipapp): add content hash support to __main__-based invocations …
rickeylev Apr 5, 2026
dd3614e
chore: finish removing pip_repository_annotations (#3684)
rickeylev Apr 6, 2026
bd7696a
feat!: make windows use venvs (#3680)
rickeylev Apr 9, 2026
6295ea0
feat(wheel): Add support for add_path_prefix (#3679)
antoniojkim Apr 10, 2026
8c6f9d8
chore: update changelog, version markers, for 2.0 release (#3689)
rickeylev Apr 10, 2026
c99d2b4
sphinxdoc: move tests and docs to module-root directory (#3690)
rickeylev Apr 10, 2026
ad74ef7
feat!(pypi): enable bazel downloader by default (#3691)
aignas Apr 11, 2026
32846c6
fix: namespace package calculation on windows (#3693)
rickeylev Apr 12, 2026
6d57b1a
chore: add some skills and update agents doc (#3696)
rickeylev Apr 12, 2026
d7ae199
test(pypi): check index url precedence in various combinations (#3698)
aignas Apr 12, 2026
fa783be
test(pypi): add argparse.bzl tests (#3697)
aignas Apr 12, 2026
17d7732
chore: make buildkite-get-results skill work with large job numbers (…
rickeylev Apr 13, 2026
85e4a3c
chore: factor mock mctx/rctx functionality into separate file (#3700)
rickeylev Apr 13, 2026
9a6be4c
refactor: split create_providers into separate functions (#3695)
rickeylev Apr 13, 2026
9790ae0
chore: populate 2.0 for VERSION_NEXT_FEATURE for py_wheel add_path_pr…
rickeylev Apr 14, 2026
6e72de2
chore: have no-matching-distribution error message hint about target_…
rickeylev Apr 14, 2026
7369341
feat(runfiles): create pathlib api for runfiles library (#3694)
rickeylev Apr 14, 2026
bf2d3c4
fix(sphinxdocs): update MODULE.bazel to depend on a released version …
aignas Apr 14, 2026
c33ba23
sphinxdocs: remove local rules_python dev overrides (#3705)
rickeylev Apr 14, 2026
7a68221
tests: better simulate BCR environment (#3706)
rickeylev Apr 15, 2026
dcfb311
build(deps): bump cryptography from 46.0.6 to 46.0.7 in /tools/publis…
dependabot[bot] Apr 15, 2026
208ca88
fix(pypi): skip index lookups when all package overrides are specifie…
aignas Apr 16, 2026
6dac0f6
feat(toolchains): Add 3.10.20, 3.11.15, 3.12.13, 3.13.{12,13} 3.14.{3…
pjjw Apr 17, 2026
fe43548
deps(gazelle): Bump WORKSPACE gazelle version 0.36.0 --> 0.47.0 (to m…
dougthor42 Apr 19, 2026
6da1431
fix(pypi): correctly write the used facts back (#3719)
aignas Apr 20, 2026
19a2c04
fix(pypi): build the environment on the fly (#3720)
aignas Apr 20, 2026
547521e
feat(windows): site-packages venv support (#3718)
rickeylev Apr 21, 2026
afab5ed
doc: add notes on the design (#3722)
aignas Apr 21, 2026
1c8ca73
deps(gazelle): Finish bazel-gazelle version bump from #3717 (#3724)
dougthor42 Apr 21, 2026
2e178c2
feat(runfiles): implement runfiles.Path io methods (#3716)
rickeylev Apr 23, 2026
ccdfc8a
fix(pypi): don't resolve python interpreter when not necessary (#3727)
rickeylev Apr 23, 2026
8633255
fix(gazelle): handle auto-included __init__.py when generating py_bin…
jvolkman Apr 23, 2026
1c38124
feat(toolchains): add add_target_settings to python.override (#3731)
novas0x2a Apr 25, 2026
3f6daa8
refactor(pypi): extract a function for deleting files recursively (#3…
aignas Apr 26, 2026
b81b287
fix(entry_point): ignore type lints on the generated files (#3736)
aignas Apr 26, 2026
1567357
refactor(twine): use py_binary for publishing in WORKSPACE (#3734)
aignas Apr 26, 2026
aa5bd2c
chore: enable platform-specific configs and silence C++ warnings in .…
rickeylev Apr 26, 2026
c3c0daf
tests: support whl_from_dir_repo on Windows (#3740)
rickeylev Apr 26, 2026
d7e33d5
docs: give guidance on pr body content (#3742)
rickeylev Apr 26, 2026
82ae73e
chore(entry_point): remove all repository_rule entry_point code and d…
aignas Apr 26, 2026
12eac29
feat(venv): support data, include, and scripts schemes (#3726)
rickeylev Apr 27, 2026
5d0016a
chore: remove groodt from codeowners (#3741)
rickeylev Apr 27, 2026
2e8aa91
chore: make pipstar non-switchable (#3737)
aignas Apr 27, 2026
098cb29
feat(pypi): support isolated `pip.parse` (#3669)
ouillie Apr 27, 2026
4cce534
fix(uv): use astral urls for uv primary source, github as secondary (…
jwnimmer-tri Apr 29, 2026
588a42b
build(deps): bump softprops/action-gh-release from 2 to 3 (#3702)
dependabot[bot] Apr 29, 2026
78ae1f0
fix(pypi): harden the WORKSPACE python detection in pip_repository (#…
aignas Apr 29, 2026
eda9fe3
feat: add package metadata for wheel libraries (#3531)
stevebarrau Apr 29, 2026
a6e7d34
feat(venv): make wheel scripts runnable in venv (#3743)
rickeylev Apr 30, 2026
b87cf67
feat: Add alias_kind directive support to Gazelle plugin. (#3713)
canislupaster Apr 30, 2026
ee7c54b
chore: always use starlark-based extraction for wheels (#3748)
rickeylev May 1, 2026
e784fc2
docs: rewrite multi-version dependency track guide using custom platf…
rickeylev May 3, 2026
83f714d
fix(pypi): include RECORD file in installed wheel targets (#3752)
rickeylev May 3, 2026
6a58e1e
feat(gazelle): enable pyi attrs by default (#3753)
amartani May 7, 2026
ca066b8
chore(pypi): remove unused config settings code (#3739)
aignas May 7, 2026
b5c8873
fix(toolchains): add releases.astral.sh mirror for python-build-stand…
rickeylev May 8, 2026
9dc505b
feat(coverage): add Python 3.14 support and bump coverage.py to 7.10.…
Syndic May 10, 2026
3871306
fix(pypi): pass the correct versions to get_index_urls and fix cache …
aignas May 10, 2026
5511aaf
fix(logger): do not output WARN level logs for non-root modules (#3760)
aignas May 10, 2026
32527de
ci: update RBE toolchain version from ubuntu2204 to ubuntu2404 (#3778)
meteorcloudy May 19, 2026
dc9c1ab
docs: split toolchain bumps from #3708 into 2.0.2 and 1.9.1 changelog…
kevinpark1217 May 20, 2026
4b99ec3
fix(rules): allow path separators in 'main' attribute (#3790)
titusfortner May 20, 2026
f4ebb5b
feat(coverage): warn when bundled coverage tool has no wheel for requ…
Syndic May 20, 2026
61cfa88
fix(pip_compile): Forward target compatibility to *.update (#3787)
castler May 20, 2026
c7efd79
fix(system_python): Remove printing of not always present attribute (…
limdor May 20, 2026
bc8a62b
refactor(pypi): cleanup marker evaluation code in requirement parsing…
aignas May 23, 2026
a9de4d5
chore: use ruff to lint and format files and apply fixes (#3779)
aignas May 24, 2026
cef5a6a
fix: avoid ln race condition in bootstrap script (#3797)
rickeylev May 27, 2026
733f240
chore: use direct @dev_pip targets instead of requirement() (#3798)
rickeylev May 27, 2026
10e1f7c
fix(pypi): do not fail on indexes without root index (#3799)
aignas May 29, 2026
ae129b3
fix(build-data): remove CONFIG_MODE from build data (#3801)
rickeylev May 31, 2026
ef09f63
chore: tell agents to not amend or rebase PRs (#3804)
rickeylev Jun 1, 2026
94ccb8c
test(mocks): extract mock python extension helper (#3803)
rickeylev Jun 1, 2026
25ad57c
fix(uv): allow environment setting for the update action (#3800)
aignas Jun 3, 2026
c00bbaf
refactor: use python_ext mock helpers in python_tests.bzl (#3813)
rickeylev Jun 8, 2026
dcb7dfa
feat: add //command_line_option:extra_toolchains pseudo-flag (#3810)
rickeylev Jun 8, 2026
8b38325
build: configure secondary mirror fallback (#3814)
rickeylev Jun 8, 2026
c0fef46
fix(uv): respect uv.tool settings in pyproject.toml (#3811)
aignas Jun 9, 2026
42c8e75
feat(toolchains): support runtime registration from manifest (#3802)
rickeylev Jun 9, 2026
7053e26
Gazelle: Delete stale py_library and py_test targets (#3817)
taowang487 Jun 11, 2026
99d0c3d
refactor(toolchains): register runtimes using manifest (#3812)
rickeylev Jun 14, 2026
44ec76f
docs: update changelog for 2.0.3 release (#3820)
udaya2899 Jun 16, 2026
6ce7840
fix(coverage): handle nested coverage collection (#3823)
gergondet-woven Jun 16, 2026
102b501
feat: expose interpreter files-to-run on PyRuntimeInfo (#3795)
jsun-splunk Jun 17, 2026
5c32fa9
chore: prepare 2.1 release (#3829)
rickeylev Jun 18, 2026
98b769e
chore: generate release changelog from news entries (#3827)
rickeylev Jun 19, 2026
105f654
fix(coverage): skip lcov report when no data was collected (#3832)
maxbirkner Jun 19, 2026
fe24f8c
fix(pypi): respect empty envsubst expansion in experimental_index_url…
kriscfoster Jun 19, 2026
a6541b5
refactor(pypi): don't use Python to patch wheels (#3808)
aignas Jun 19, 2026
de0405a
feat(py_info): expose VenvSymlinkEntry and VenvSymlinkKind as public …
rickeylev Jun 20, 2026
694cc06
doc: merge news into generated changelog (#3836)
rickeylev Jun 20, 2026
ca86984
ci: enable bazel-diff (#3838)
rickeylev Jun 20, 2026
b16ce73
fix: run bazel-diff in cquery mode under bazelci (#3839)
rickeylev Jun 21, 2026
e9ecdba
ci: disable bazel-diff due to platform compatibility conflicts (#3840)
rickeylev Jun 21, 2026
01903fc
chore: warn on implicit __init__.py creation (#3841)
rickeylev Jun 21, 2026
1a15c3b
fix(bootstrap): use retry loop for win32 version lookup in site init …
rickeylev Jun 22, 2026
dd53218
fix(rules): disambiguate slash target venv outputs (#3845)
gleyba Jun 24, 2026
4b19581
chore: automate releases (#3833)
rickeylev Jun 24, 2026
913201d
build(deps): bump actions/checkout from 6 to 7 (#3843)
dependabot[bot] Jun 24, 2026
0384676
chore: remove accidentally committed release automation plan (#3846)
rickeylev Jun 24, 2026
63f77d3
feat: unified pypi hub repository (#3837)
rickeylev Jun 25, 2026
12680c5
feat(pypi): support importing uv.lock file (#3785)
aignas Jun 25, 2026
ee53e46
chore: add agent rule to base new branches on upstream/main (#3849)
rickeylev Jun 26, 2026
9ed7641
build(ci): consolidate PR guardrails and block draft files (#3859)
rickeylev Jun 28, 2026
de6ca1b
refactor: use gazelle for bzl_library management (#3852)
rickeylev Jun 28, 2026
959a103
fix(ci): use --repo flag in gh pr diff to avoid checkout (#3861)
rickeylev Jun 28, 2026
d37c649
feat: stop using chmod on Bazel 8.6+ (#3855)
aignas Jun 28, 2026
20db956
ci: make pr-metadata-check run on PR body edit (#3862)
rickeylev Jun 28, 2026
367190a
chore(pypi): cleanup unused code (#3864)
aignas Jun 29, 2026
097f6a1
chore(release): correct version tagging and improve promotion flow (#…
rickeylev Jun 29, 2026
9734b11
chore(release): add dry-run to release tool prepare command (#3869)
rickeylev Jun 30, 2026
8a825aa
chore(release): reuse existing PRs and avoid early exit in prep tool …
rickeylev Jun 30, 2026
9af23e5
chore(release): use force push and clean up git helpers in prep tool …
rickeylev Jun 30, 2026
ee0acbd
Prepare release v2.2.0 (#3874)
github-actions[bot] Jun 30, 2026
098379f
chore(release): fix release label consistency in workflows and templa…
rickeylev Jun 30, 2026
fbb2ccf
fix: avoid stage1 bootstrap stdlib shadowing (#3854)
gleyba Jul 1, 2026
865ed25
build(deps): bump bazel-contrib/publish-to-bcr/.github/workflows/publ…
dependabot[bot] Jul 1, 2026
3ab60b5
chore(release): support custom remote in create-release-branch and re…
rickeylev Jul 1, 2026
2241f8b
chore(release): refactor create-rc and handle existing remote release…
rickeylev Jul 1, 2026
dc0d977
chore(release): various fixes to release tool and workflows (#3880)
rickeylev Jul 1, 2026
30a0583
feat(pypi): add pip.dep to declare abstract pypi dependencies (#3850)
rickeylev Jul 1, 2026
cc799f1
chore(release): refactor process-backports and various release tool f…
rickeylev Jul 2, 2026
839deaf
chore(release): factor code, make testable, clarify workflow names (#…
rickeylev Jul 2, 2026
6570a9e
chore(release): pass missing --remote argument to release workflows (…
rickeylev Jul 2, 2026
e433644
chore(release): enable execution in process-backports workflow (#3884)
rickeylev Jul 2, 2026
e51d822
chore(release): release automation fixes and refactoring (#3885)
rickeylev Jul 2, 2026
8629003
fix: use locale-neutral Windows ACL for build data (#3887)
alex-the-third Jul 2, 2026
08025e1
feat(py_test): add opt-in safeguard against accidental no-op tests (#…
thirtyseven Jul 3, 2026
7968ac9
feat: enable pyproject.toml as single source of truth for Python vers…
golithe Jul 3, 2026
8396c28
Fix release tool links and improve workflow robustness (#3888)
rickeylev Jul 3, 2026
f3fa8da
build(release): support triggering release workflows via comments (#3…
rickeylev Jul 3, 2026
b2d1bf0
chore(release): allow comments to trigger actions, update releasing d…
rickeylev Jul 3, 2026
1f87784
chore(release): grant write permissions to on_issue_comment workflow …
rickeylev Jul 3, 2026
e3c8867
chore(release): add pull-requests: write permission to on_issue_comme…
rickeylev Jul 3, 2026
12ce31b
chore(release): auto-add RC tasks to checklist in create-rc (#3894)
rickeylev Jul 3, 2026
d77d5a4
fix(release): secure workflows against shell injection (#3895)
rickeylev Jul 3, 2026
1d99f70
fix: run executable zip action with execution Python to better suppor…
dzbarsky Jul 3, 2026
f1db067
chore(release): process backports as part of creating RC (#3896)
rickeylev Jul 3, 2026
5fe64d8
chore(release): automate backport processing on PR merge, and have ad…
rickeylev Jul 4, 2026
0896b47
chore(release): fix promote_rc arguments and align comments (#3898)
rickeylev Jul 4, 2026
5650cc8
chore(release): fix promote-rc command and update workflow args (#3899)
rickeylev Jul 4, 2026
dcbdf1b
chore(release): make promote_rc workflow call publish_release workflo…
rickeylev Jul 4, 2026
52c51be
docs: sync 2.2 changelog and news to main (#3901)
rickeylev Jul 5, 2026
bcaf08a
chore(release): sync changelog and version markers to main during bac…
rickeylev Jul 6, 2026
b5d754e
chore: remove stale process-backports-before-rc news file (#3904)
rickeylev Jul 6, 2026
89eba16
chore(release): fix invalid workflow file syntax (#3908)
rickeylev Jul 6, 2026
b443ec7
build(deps): bump astral-sh/ruff-action from 4.0.0 to 4.1.0 (#3910)
dependabot[bot] Jul 7, 2026
00922ad
fix(pip): parse the index_url from uv.lock file (#3906)
aignas Jul 9, 2026
fc18dc1
chore: automated code review using antigravity (#3905)
rickeylev Jul 9, 2026
84d313b
fix: add explicit `data` attribute to `compile_pip_requirements` and …
granatam Jul 9, 2026
966329b
chore(pr-review): trigger automated review workflow on issue comments…
rickeylev Jul 11, 2026
cf152cd
chore(reviewbot): fix antigravity_review execution and configuration …
rickeylev Jul 11, 2026
a31feb9
fix(sphinxdocs): invalidate cache on branch change (#3917)
kaycebasques Jul 11, 2026
5bdec9f
refactor: use centralized NOT_ACTUALLY_PUBLIC across internal targets…
rickeylev Jul 12, 2026
19ffd21
fix: make executable implicit defaults public so other modules can us…
13steinj Jul 12, 2026
68d0878
chore(reviewbot): expand multi-model cascade with fallback endpoints …
rickeylev Jul 12, 2026
84f3c78
empty impl
rickeylev Sep 23, 2025
6fe2b19
basic attr builder usage
rickeylev Sep 23, 2025
6bab54a
add stub tests
rickeylev Sep 23, 2025
0dd6053
vibe coded py_extension impl. looks roughly valid, but untested
rickeylev Sep 23, 2025
3e75f74
making more vibe coded progress
rickeylev Sep 24, 2025
3e8240c
gave up vibe coding. confidence isn't correctness.
rickeylev Sep 24, 2025
ee792e5
try cc_shared_library impl
rickeylev Oct 16, 2025
4679c0a
feat: updates to the py_extension rule for building C extensions (#3851)
rsartor-cmd Jun 26, 2026
192a290
Don't leave a trailing slash for the root package.
rsartor-cmd Jun 26, 2026
c7438f2
Remove duplicate assignment.
rsartor-cmd Jun 26, 2026
f09a3d8
Remove typical C-style integer suffixes before parsing.
rsartor-cmd Jun 26, 2026
ce3d4a5
Fix check for filename.
rsartor-cmd Jun 26, 2026
c41871d
Remove unnecessary guard.
rsartor-cmd Jun 26, 2026
d26c7e2
Re-format docstring.
rsartor-cmd Jun 26, 2026
709a15c
Get the platform from the constraints.
rsartor-cmd Jun 29, 2026
9cecca3
Adjust formatting syntax.
rsartor-cmd Jun 29, 2026
fb5bb51
Change the default value.
rsartor-cmd Jun 29, 2026
95d8a95
Add more test cases for py_limited_api.
rsartor-cmd Jun 29, 2026
2ec69e3
Use RunfilesBuilder instead of manual.
rsartor-cmd Jun 29, 2026
603644d
Add abi_tag to PyCcToolchainInfo.
rsartor-cmd Jun 30, 2026
3d50da2
Use the PyCcToolchainInfo to derive the filename instead of the runti…
rsartor-cmd Jun 30, 2026
85390f7
Remove the fallback. Determine platform tag solely from constraints.
rsartor-cmd Jun 30, 2026
0ef9854
Remove the version compatibility check, as it has performance implica…
rsartor-cmd Jun 30, 2026
f2a12f3
Fix header filename.
rsartor-cmd Jun 30, 2026
c440311
Update python/private/cc/py_extension_rule.bzl
rsartor-cmd Jun 30, 2026
03efdac
ruff
rsartor-cmd Jun 30, 2026
8860b34
Derive the values for the _constraints attr programmatically, instead…
rsartor-cmd Jun 30, 2026
0b5a811
Take glibc-vs-musl into account, so we get the right platform and name.
rsartor-cmd Jun 30, 2026
e93b38f
Clean up as per the linter.
rsartor-cmd Jun 30, 2026
2e1e6ae
Remove print()s per buildifier.
rsartor-cmd Jun 30, 2026
3f2d3a3
Remove unused variable (buildifier).
rsartor-cmd Jun 30, 2026
0925c77
Sort keys [buildifier]
rsartor-cmd Jun 30, 2026
6131100
Remove print()s per buildifier.
rsartor-cmd Jun 30, 2026
a11e200
Remove unused load().
rsartor-cmd Jun 30, 2026
79eb5b1
Call out unused parameters [buildifier]
rsartor-cmd Jun 30, 2026
84195ab
Add some basic tests of different dependency situations, so we can co…
rsartor-cmd Jul 6, 2026
fa9d9a9
Replace the custom compiling and linking logic with internal cc_libra…
rsartor-cmd Jul 6, 2026
9f87991
Add missing files.
rsartor-cmd Jul 6, 2026
a83b44a
Add a data argument to the macro.
rsartor-cmd Jul 6, 2026
92f8eb2
Add missing file
rsartor-cmd Jul 7, 2026
7a209c6
Add a couple more examples for PyInit_* defined in dependency targets.
rsartor-cmd Jul 7, 2026
0d9b6b6
Add missing files
rsartor-cmd Jul 7, 2026
5367dea
Expand the analysis tests with more details assertions.
rsartor-cmd Jul 7, 2026
3423e5f
Re-format files
rsartor-cmd Jul 7, 2026
5e9dd8f
Address buildifier and buildifier-lint warnings.
rsartor-cmd Jul 7, 2026
baa5a80
Use text instead of code file for data.
rsartor-cmd Jul 9, 2026
390f838
Ignore unusual edge case.
rsartor-cmd Jul 9, 2026
3870d72
Restore missing file.
rsartor-cmd Jul 9, 2026
3ff2f69
Remove the CcSharedLibraryInfo provider for now.
rsartor-cmd Jul 10, 2026
f88f4ea
Calculate the platform tag from the constraints directly, instead of …
rsartor-cmd Jul 10, 2026
328daa5
Remove unused load()
rsartor-cmd Jul 13, 2026
e7e8d76
Fix tests.
rsartor-cmd Jul 14, 2026
710e9ad
Include free-threading 't' flag in the abi_tag, if the interpreter is…
rsartor-cmd Jul 14, 2026
eb50ca2
Calculate the platform tag and include it as part of the toolchain info.
rsartor-cmd Jul 14, 2026
d8057b4
Pass the right set of additional kwargs to the internal generated tar…
rsartor-cmd Jul 14, 2026
acf55b4
Adjust import logic to account for package names.
rsartor-cmd Jul 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
10 changes: 10 additions & 0 deletions .agents/rules/bzl.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
trigger: glob
description: Starlark / Bazel .bzl file coding style rules
globs: *.bzl
---

# Starlark Rules

* Use triple-quoted strings for multi-line rule doc args.
* Don't use backslash line continuation in rule doc args.
10 changes: 10 additions & 0 deletions .agents/rules/github_actions_workflows.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
name: github-actions-workflows
trigger: glob
globs: [".github/workflows/*.yml", ".github/workflows/*.yaml", ".github/*.yaml"]
---

# GitHub Actions Workflows Rule

* When creating files in `.github/workflows/` (such as `.yml` or `.yaml`
files), always use the latest version of the referenced GitHub Actions.
8 changes: 8 additions & 0 deletions .agents/rules/when-to-use-copyright.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
trigger: always_on
---

# When to Use Copyright

Unless directed by the user otherwise, do not add Bazel copyright to new or
existing files.
18 changes: 18 additions & 0 deletions .agents/rules/workspace.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
trigger: always_on
---

# Workspace Rules

To avoid confusion from using outdated code states, when starting a new
conversation/session or when first starting a new branch or worktree, unless
explicitly instructed otherwise, ensure the latest upstream code is used as the
basis:
* Fetch `upstream/main` (`git fetch upstream main`).
* Base any new branch or worktree upon `upstream/main` (e.g.,
`git checkout -b <branch> upstream/main`).
* Run the workspace helper script to configure upstream tracking and safe
pushing:
```bash
.agents/scripts/setup_triangle_branch.sh <branch>
```
25 changes: 25 additions & 0 deletions .agents/scripts/setup_triangle_branch.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/bin/bash
# Helper script to set up upstream tracking for fork-and-PR workflow.
set -e

# Detect current branch if not provided as argument
BRANCH_NAME="${1:-$(git symbolic-ref --short HEAD)}"

if [ -z "$BRANCH_NAME" ]; then
echo "Error: Could not detect current branch name." >&2
exit 1
fi

echo "Setting up upstream tracking for branch: $BRANCH_NAME"

# 1. Set the pull/fetch behavior to track the canonical repo's main branch
git config --local "branch.${BRANCH_NAME}.remote" upstream
git config --local "branch.${BRANCH_NAME}.merge" refs/heads/main

# 2. Override the destination remote for pushing
git config --local "branch.${BRANCH_NAME}.pushRemote" origin

# 3. Defend against global push.default settings (ensure it pushes to current branch name)
git config --local push.default current

echo "Successfully configured upstream/main tracking and origin pushRemote for $BRANCH_NAME!"
16 changes: 16 additions & 0 deletions .agents/skills/analyze-ci-failure/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
---
name: analyze-ci-failure
description: Download and analyze a CI failure log to construct an actionable suggested fix plan and report back
---

When a CI monitoring workflow alerts you to a failed Buildkite job or GitHub check, invoke this skill by running:
```bash
./.agents/skills/analyze-ci-failure/scripts/analyze_ci_failure.py "<job_name>" "<build_id_or_log_url>" "<job_id>" "<your_conversation_id>"
```

### ✨ What this Skill Does
1. **Resolves Log**: Automatically resolves the Buildkite job download URL or locates existing local log artifacts.
2. **Downloads & Ingests**: Fetches the full raw CI log file and saves it locally.
3. **Smart Error Extraction**: Scans the log lines for critical failure signatures (`Traceback`, `ERROR:`, `FAILED:`, missing packages, compiler aborts).
4. **Fix Plan Synthesis**: Constructs a beautifully structured Markdown suggested plan on how to resolve the root cause.
5. **Natively Notifies**: Dispatches a high-priority summary notification message back to your active agent conversation via `agentapi send-message`!
142 changes: 142 additions & 0 deletions .agents/skills/analyze-ci-failure/scripts/analyze_ci_failure.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
#!/usr/bin/env python3

import argparse
import os
import re
import subprocess
import sys
import urllib.request


def fetch_log(build_id, job_id, output_path):
if build_id.startswith("http"):
log_url = build_id
elif job_id.startswith("http"):
log_url = job_id
else:
log_url = f"https://buildkite.com/organizations/bazel/pipelines/rules-python-python/builds/{build_id}/jobs/{job_id}/download.txt"

if not log_url.endswith("/download.txt") and "buildkite.com" in log_url:
log_url = re.sub(r"/log$", "/download.txt", log_url)

print(f"📥 Downloading CI failure log from {log_url}...")
req = urllib.request.Request(log_url, headers={"User-Agent": "ci-analyzer"})
try:
with urllib.request.urlopen(req) as resp:
content = resp.read()
with open(output_path, "wb") as f:
f.write(content)
return True
except Exception as e:
print(f"⚠️ Failed to download log from {log_url}: {e}", file=sys.stderr)
with open(output_path, "w") as f:
f.write(f"Failed to download log from {log_url}: {e}\n")
return False


def parse_log(log_path):
if not os.path.exists(log_path):
return [f"Log file not found at {log_path}"]

with open(log_path, errors="replace") as f:
lines = f.readlines()

errors = []
for line in lines:
if any(
keyword in line
for keyword in [
"ERROR:",
"FAILED:",
"Critical Path",
"Traceback",
"Exception",
"FileNotFoundError",
"no such package",
"no such target",
"exit code",
]
):
errors.append(line.strip())

return errors[:30]


def create_plan(job_name, log_path, errors):
err_str = (
"\n".join(errors)
if errors
else "No obvious keyword error lines matched. Please inspect the raw log file."
)

plan = f"""# 🚨 CI Failure Analysis Report: {job_name}

## 📁 CI Log Path
`{log_path}`

## 🔥 Extracted Failure Snippets
```text
{err_str}
```

## 🛠️ Suggested Plan to Fix
1. **Inspect Log**: Review the exact log snippets above or read the full raw log file at `{log_path}`.
2. **Reproduce Locally**: Run `./replicate_ci "{job_name}"` or the matching `bazel build/test` command locally.
3. **Apply Fix**: Resolve the root cause in the relevant `BUILD.bazel` or Starlark files.
4. **Verify & Push**: Run local verification with `--config=fast-tests` and push the updated branch to trigger a clean pipeline.
"""
return plan


def main():
parser = argparse.ArgumentParser(
description="Download CI failure log, analyze root cause, and create fix plan."
)
parser.add_argument("job_name", help="Name of the failed job")
parser.add_argument("build_id", help="Buildkite Build ID, Build number, or Log URL")
parser.add_argument("job_id", help="Buildkite Job ID or link")
parser.add_argument("conv_id", help="Conversation ID to report back to")
args = parser.parse_args()

skill_dir = os.path.abspath(os.path.dirname(__file__))
logs_dir = os.path.join(skill_dir, "ci_logs")
os.makedirs(logs_dir, exist_ok=True)

safe_jname = re.sub(r"[^a-zA-Z0-9]", "_", args.job_name)
log_path = os.path.join(logs_dir, f"ci_{safe_jname}_{args.job_id}.log")

fetch_log(args.build_id, args.job_id, log_path)

print(f"🚀 Analyzing CI failure log for '{args.job_name}' at '{log_path}'...")
errors = parse_log(log_path)
plan = create_plan(args.job_name, log_path, errors)

plan_file = os.path.join(logs_dir, f"ci_plan_{safe_jname}.md")
with open(plan_file, "w") as f:
f.write(plan)

print(
f"📄 Plan generated at '{plan_file}'. Dispatching notification to conversation {args.conv_id}..."
)

msg = (
f"⚠️ Remote CI Job '{args.job_name}' Analysis Complete!\n\n"
f"I downloaded and analyzed the failure log. Findings and suggested fix plan compiled at artifact file: `{plan_file}`.\n\n"
f"Raw CI Log Path: `{log_path}`"
)

res = subprocess.run(
[
"agentapi",
"send-message",
"--title=CI Failure Analysis Plan",
args.conv_id,
msg,
]
)
if res.returncode != 0:
print(f"❌ Failed to send agentapi message. Printing plan directly:\n{plan}")


if __name__ == "__main__":
main()
10 changes: 10 additions & 0 deletions .agents/skills/buildkite-get-results/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
name: buildkite-get-results
description: Gets buildkite build results
---

Pass the PR number, Build URL, or Build ID to the `scripts/get_buildkite_results.py` script.

The `--jobs` flag can do glob-style filtering of jobs.

The `--download` flag will download job logs.
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
#!/usr/bin/env python3

import argparse
import json
import re
import subprocess
import sys


def check_cli(cmd_name, install_url):
try:
subprocess.run(
[cmd_name, "--version"],
check=True,
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
)
except Exception:
print(
f"❌ Error: '{cmd_name}' CLI is not installed or not in PATH.",
file=sys.stderr,
)
print(f"Please install it from {install_url}", file=sys.stderr)
sys.exit(1)


def get_build_url_from_pr(pr_number):
check_cli("gh", "https://cli.github.com/")
cmd = ["gh", "pr", "checks", str(pr_number), "--json", "name,link"]
try:
res = subprocess.run(cmd, capture_output=True, text=True, check=True)
checks = json.loads(res.stdout)
for c in checks:
link = c.get("link", "")
if "buildkite.com" in link:
return link.split("#")[0]
print(f"❌ No Buildkite checks found for PR #{pr_number}.", file=sys.stderr)
sys.exit(1)
except subprocess.CalledProcessError as e:
print(f"❌ Error fetching PR checks: {e.stderr}", file=sys.stderr)
sys.exit(1)


def normalize_build_target(target):
# Transforms https://buildkite.com/bazel/rules-python-python/builds/15707
# into bazel/rules-python-python/15707
m = re.search(r"buildkite\.com/([^/]+)/([^/]+)/builds/(\d+)", target)
if m:
return f"{m.group(1)}/{m.group(2)}/{m.group(3)}"
return target


def main():
parser = argparse.ArgumentParser(
description="Gets Buildkite build results using the 'bk' CLI."
)
parser.add_argument(
"pr", help="PR number, Build URL, or Build ID (org/pipeline/build)"
)
parser.add_argument(
"--jobs",
help="Glob-style filtering of job names to display or download",
)
parser.add_argument("--download", action="store_true", help="Download job logs")
args = parser.parse_args()

check_cli("bk", "https://github.com/buildkite/cli")

target = args.pr
if target.isdigit() and len(target) < 10:
print(f"🔍 Inspecting PR #{target} via gh to find Buildkite URL...")
target = get_build_url_from_pr(target)

build_id = normalize_build_target(target)
print(f"🚀 Querying Buildkite for build: {build_id}\n")

# Run bk build view
res = subprocess.run(["bk", "build", "view", build_id])
if res.returncode != 0:
print(
f"❌ Failed to view build '{build_id}' via 'bk' CLI.",
file=sys.stderr,
)
sys.exit(res.returncode)

if args.download:
print(f"\n📥 Downloading logs for build: {build_id}")
dl_res = subprocess.run(["bk", "build", "download", build_id])
if dl_res.returncode != 0:
print(
"⚠️ 'bk build download' failed or not supported. Try using 'bk job log <job-id>' for specific jobs."
)


if __name__ == "__main__":
main()
17 changes: 17 additions & 0 deletions .agents/skills/buildkite-retry-job/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
name: buildkite-retry-job
description: Retry a failed build kite job
---

Use `scripts/retry_buildkite_jobs.py` to retry a job. This is best used
when there are network failures.


example:

```
retry_buildkite_jobs.py org pipeline build
```
You can also simply pass a PR number or a direct Buildkite build URL.

The `--jobs` flag can be used to retry specific jobs.
Loading
Loading