Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
b79d73e
ci: pin the runner image and the one branch-ref action
singlerider Sep 28, 2026
626795f
ci(lint): pin ruff and Rust toolchain, fix resulting lint errors
singlerider Oct 1, 2026
d2422d1
Merge remote-tracking branch 'fork/fix/ci-pin-lint-toolchain' into ch…
singlerider Oct 3, 2026
74c7c8d
ci(benchmark): skip the PR comment on fork PRs
singlerider Oct 3, 2026
28323c6
ci: pin the windows and macos wheel runners
singlerider Oct 3, 2026
777d2b4
ci: publish on version tags only, split publish.yml, shared CLA
singlerider Oct 3, 2026
6b6738f
style: format README code blocks with ruff
singlerider Oct 3, 2026
69c8e9d
build: read the Python package version from Cargo.toml
singlerider Oct 3, 2026
2bc8686
ci(publish): crates.io trusted publishing instead of a stored token
singlerider Oct 3, 2026
bcbba9c
ci: call the shared rust, python, release-check, and publish workflows
singlerider Oct 3, 2026
9e3735d
ci: pin the shared workflows to blacklanternsecurity/CLA e532142
singlerider Oct 3, 2026
0ba31d0
ci: pin the shared workflows to blacklanternsecurity/CLA main
singlerider Oct 8, 2026
d3aa8ee
Bump the github-actions group across 1 directory with 9 updates
dependabot[bot] Oct 20, 2026
594372c
ci(publish): release on merge to the trunk, per the publishing policy
singlerider Oct 21, 2026
2e983b3
Merge remote-tracking branch 'upstream/dev' into HEAD
singlerider Oct 21, 2026
54da7a5
Merge pull request #107 from blacklanternsecurity/dependabot/github_a…
liquidsec Oct 21, 2026
4b628bf
ci(dependabot): weekly grouped updates and shared auto-merge for mino…
singlerider Oct 22, 2026
1231d1e
ci(release): adopt CLA#11's environment-held credentials
singlerider Oct 23, 2026
b6b4ab2
Merge remote-tracking branch 'upstream/dev' into HEAD
singlerider Oct 23, 2026
3bdc148
chore(release): bump to 4.3.1
singlerider Oct 23, 2026
fcde8cd
Update license metadata to AGPL-3.0-or-later
pjhartlieb Oct 23, 2026
d864279
Bump ruff from 0.17.1 to 0.17.2
dependabot[bot] Oct 26, 2026
3510c97
ci(publish): per-job permissions, drop dependabot auto-merge, documen…
singlerider Oct 26, 2026
d6b5fe2
Merge pull request #112 from blacklanternsecurity/license/agpl-metada…
pjhartlieb Oct 27, 2026
293fcc7
Merge pull request #109 from blacklanternsecurity/dependabot/uv/dev/r…
liquidsec Oct 28, 2026
f442bed
Merge remote-tracking branch 'upstream/dev' into ci/publish-on-tag
singlerider Oct 30, 2026
83aec27
ci: pin shared workflows to release-workflows v1.0.0
singlerider Oct 30, 2026
914c8e7
Merge pull request #110 from blacklanternsecurity/ci/publish-on-tag
pjhartlieb Nov 3, 2026
09d3641
Merge stable into sync/stable-into-dev
pjhartlieb Nov 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions .flake8

This file was deleted.

59 changes: 46 additions & 13 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -1,22 +1,55 @@
# 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/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file

version: 2
updates:
- package-ecosystem: "cargo"
directories:
- "/"
- "/benchmark"
target-branch: "dev"
schedule:
interval: "weekly"
groups:
cargo-minor-patch:
patterns:
- "*"
update-types:
- "minor"
- "patch"
cargo-major:
patterns:
- "*"
update-types:
- "major"
- package-ecosystem: "uv"
directory: "/"
target-branch: "dev"
schedule:
interval: "weekly"
target-branch: "dev"
open-pull-requests-limit: 10
- package-ecosystem: github-actions
directory: /
groups:
github-actions:
uv-minor-patch:
patterns:
- "*" # Group all Actions updates into a single larger pull request
schedule:
interval: weekly
- "*"
update-types:
- "minor"
- "patch"
uv-major:
patterns:
- "*"
update-types:
- "major"
- package-ecosystem: "github-actions"
directory: "/"
target-branch: "dev"
schedule:
interval: "weekly"
groups:
github-actions-minor-patch:
patterns:
- "*"
update-types:
- "minor"
- "patch"
github-actions-major:
patterns:
- "*"
update-types:
- "major"
14 changes: 9 additions & 5 deletions .github/workflows/benchmark.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@ name: Benchmark
on:
pull_request:

permissions:
contents: read
pull-requests: write

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
Expand All @@ -12,18 +16,18 @@ jobs:
runs-on: ubuntu-24.04
steps:
- name: Check out PR
uses: actions/checkout@v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
path: head

- name: Check out target branch
uses: actions/checkout@v6
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
ref: ${{ github.event.pull_request.base.sha }}
path: base

- name: Install Rust toolchain
uses: actions-rust-lang/setup-rust-toolchain@v1
uses: actions-rust-lang/setup-rust-toolchain@ecabd13d1c56bd1345c230e542e9144811ad706f # v2.0.0
with:
cache: false

Expand Down Expand Up @@ -61,7 +65,7 @@ jobs:

- name: Upload benchmark results
if: always()
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: benchmark-results
path: |
Expand All @@ -76,7 +80,7 @@ jobs:
github.event_name == 'pull_request' &&
github.event.pull_request.head.repo.full_name == github.repository &&
github.actor != 'dependabot[bot]'
uses: actions/github-script@v8
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
with:
script: |
const fs = require('fs');
Expand Down
64 changes: 7 additions & 57 deletions .github/workflows/cla.yml
Original file line number Diff line number Diff line change
@@ -1,68 +1,18 @@
name: "CLA Assistant"
name: CLA

on:
issue_comment:
types: [created]
pull_request_target:
types: [opened, closed, synchronize]

permissions:
actions: write
contents: write
pull-requests: write
statuses: write

jobs:
CLAAssistant:
runs-on: ubuntu-24.04
steps:
- name: Generate token from GitHub App
id: app-token
uses: actions/create-github-app-token@v1
with:
app-id: ${{ secrets.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
owner: blacklanternsecurity

- name: Check org membership
id: membership
env:
GH_TOKEN: ${{ steps.app-token.outputs.token }}
run: |
if [ "${{ github.event_name }}" = "pull_request_target" ]; then
AUTHOR="${{ github.event.pull_request.user.login }}"
else
PR_NUM="${{ github.event.issue.number }}"
AUTHOR=$(gh api "repos/${{ github.repository }}/pulls/$PR_NUM" --jq '.user.login' 2>/dev/null)
fi
if [ -n "$AUTHOR" ] && gh api "orgs/blacklanternsecurity/members/$AUTHOR" > /dev/null 2>&1; then
echo "is_member=true" >> "$GITHUB_OUTPUT"
else
echo "is_member=false" >> "$GITHUB_OUTPUT"
fi

- name: Skip CLA for org members
if: steps.membership.outputs.is_member == 'true' && github.event_name == 'pull_request_target'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh api --method POST "repos/${{ github.repository }}/statuses/${{ github.event.pull_request.head.sha }}" \
-f state=success \
-f context="CLAAssistant" \
-f description="CLA check skipped — author is an org member"

- name: "CLA Assistant"
if: |
(steps.membership.outputs.is_member != 'true') &&
((github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request_target')
uses: contributor-assistant/github-action@v2.6.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PERSONAL_ACCESS_TOKEN: ${{ steps.app-token.outputs.token }}
with:
path-to-signatures: "signatures/version1/cla.json"
path-to-document: "https://github.com/blacklanternsecurity/CLA/blob/main/ICLA.md"
branch: "main"
allowlist: "dependabot[bot],github-actions[bot],renovate[bot]"
remote-organization-name: "blacklanternsecurity"
remote-repository-name: "CLA"
lock-pullrequest-aftermerge: "false"
cla:
uses: blacklanternsecurity/release-workflows/.github/workflows/cla-reusable.yml@c53c202eedeb26a86088936363e6cb06ce99ac15 # v1.0.0
secrets:
APP_ID: ${{ secrets.APP_ID }}
APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}
90 changes: 90 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
name: publish

on:
push:
branches: [stable]

permissions: {}

concurrency:
group: publish-${{ github.ref }}
cancel-in-progress: false

jobs:
check:
permissions:
contents: read
actions: read
pull-requests: read
uses: blacklanternsecurity/release-workflows/.github/workflows/release-check.yml@c53c202eedeb26a86088936363e6cb06ce99ac15 # v1.0.0
secrets:
BLS_RELEASE_PRIVATE_KEY: ${{ secrets.BLS_RELEASE_PRIVATE_KEY }}

rust:
needs: check
if: needs.check.outputs.release == 'true'
permissions:
contents: read
uses: ./.github/workflows/rust-tests.yml

python:
needs: check
if: needs.check.outputs.release == 'true'
permissions:
contents: read
uses: ./.github/workflows/python-tests.yml
secrets:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}

wheels:
needs: [rust, python]
permissions:
contents: read
uses: blacklanternsecurity/release-workflows/.github/workflows/maturin-wheels.yml@c53c202eedeb26a86088936363e6cb06ce99ac15 # v1.0.0
with:
manylinux: auto

pypi:
needs: wheels
runs-on: ubuntu-24.04
environment: release
permissions:
contents: read
id-token: write
attestations: write
steps:
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
pattern: ${{ needs.wheels.outputs.artifacts }}
path: dist
merge-multiple: true
- uses: actions/attest-build-provenance@4d101475d8b20a2381f78447822ac1eab6504dd8 # v4.2.2
with:
subject-path: dist/*
- uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
with:
skip-existing: true

crates:
needs: [check, pypi]
if: needs.check.outputs.release == 'true'
permissions:
contents: read
id-token: write
uses: blacklanternsecurity/release-workflows/.github/workflows/crates.yml@c53c202eedeb26a86088936363e6cb06ce99ac15 # v1.0.0
with:
version: ${{ needs.check.outputs.version }}

release:
needs: [check, wheels, crates, pypi]
if: needs.check.outputs.release == 'true'
permissions:
contents: read
uses: blacklanternsecurity/release-workflows/.github/workflows/publish.yml@c53c202eedeb26a86088936363e6cb06ce99ac15 # v1.0.0
with:
tag: ${{ needs.check.outputs.tag }}
version: ${{ needs.check.outputs.version }}
artifacts: ${{ needs.wheels.outputs.artifacts }}
assets: dist/*
secrets:
BLS_RELEASE_PRIVATE_KEY: ${{ secrets.BLS_RELEASE_PRIVATE_KEY }}
Loading
Loading