Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
24 changes: 16 additions & 8 deletions .envrc
Original file line number Diff line number Diff line change
@@ -1,14 +1,22 @@
#!/bin/bash
#!/not/executable/bash

# Our policy is that the .envrc is entirely optional, and a user
# without direnv should not really have a worse dev experience in any way.

# 'make' is in charge of creating and managing virtualenvs, and things like
# pytest can still be directly invoked using .venv/bin/pytest
if [[ -f "${PWD}/.env" ]]; then
dotenv
fi

PATH_add "${HOME}/.local/share/sentry-devenv/bin"

if ! source .venv/bin/activate; then
echo "!!! you have no virtualenv, run 'make setup' to fix that."
# XXX: ideally, direnv is able to export PS1 as modified by sourcing venvs
# but we'd have to patch direnv, and ".venv" isn't descriptive anyways
unset PS1
if ! command -v devenv >/dev/null; then
echo "install devenv: https://github.com/getsentry/devenv#install"
return 1
fi

PATH_add "${PWD}/.devenv/bin"

export VIRTUAL_ENV="${PWD}/.venv"
PATH_add "${PWD}/.venv/bin"

PATH_add /opt/homebrew/opt/rustup/bin
50 changes: 38 additions & 12 deletions .github/workflows/build_library.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
name: Library Release Build

on:
push:
branches:
- release-library/**
- test-release-library/** # For testing the release build
push:
branches:
- release-library/**
- test-release-library/** # For testing the release build

env:
CARGO_TERM_COLOR: always
Expand Down Expand Up @@ -37,6 +37,17 @@ jobs:
env:
TARGET: ${{ matrix.build-arch }}

- uses: actions/setup-python@v6

- name: Verify Wheel
run: |
pip install --index-url 'https://pypi.devinfra.sentry.io/simple' "packaging==25.0"
# this verifies that the wheel has good metadata
# if it fails then twine upload will not succeed
# we want to error out sooner before a github release is cut
python tools/verify_wheel.py dist/*.whl
working-directory: py

- uses: actions/upload-artifact@v5
with:
name: artifact-linux-${{ matrix.build-arch }}
Expand Down Expand Up @@ -70,14 +81,24 @@ jobs:
rustup override set stable
rustup target add --toolchain stable ${{ matrix.target }}

- uses: actions/setup-python@v6
- uses: astral-sh/setup-uv@884ad927a57e558e7a70b92f2bccf9198a4be546 # v6
with:
python-version: "3.13"
version: '0.8.2'
# we just cache the venv-dir directly in action-setup-venv
enable-cache: false

- uses: getsentry/action-setup-venv@0958463ee0e02b9e8aa8f8e031afae1f84b80881 # v3.0.0
with:
cache-dependency-path: uv.lock
install-cmd: uv sync --frozen --only-dev --active

- name: Build Wheel
run: |
pip install setuptools wheel
python setup.py bdist_wheel -p ${{ matrix.py-platform }}
# this verifies that the wheel has good metadata
# if it fails then twine upload will not succeed
# we want to error out sooner before a github release is cut
python tools/verify_wheel.py dist/*.whl
working-directory: py
env:
# consumed by cargo and setup.py to obtain the target dir
Expand All @@ -100,14 +121,19 @@ jobs:
with:
submodules: recursive

- uses: actions/setup-python@v6
- uses: astral-sh/setup-uv@884ad927a57e558e7a70b92f2bccf9198a4be546 # v6
with:
python-version: "3.13"
version: '0.8.2'
# we just cache the venv-dir directly in action-setup-venv
enable-cache: false

- uses: getsentry/action-setup-venv@0958463ee0e02b9e8aa8f8e031afae1f84b80881 # v3.0.0
with:
cache-dependency-path: uv.lock
install-cmd: uv sync --frozen --only-dev --active

- name: Build sdist
run: |
pip install setuptools
python setup.py sdist
run: python setup.py sdist
working-directory: py

- uses: actions/upload-artifact@v5
Expand Down
100 changes: 76 additions & 24 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,16 +39,21 @@ jobs:
with:
submodules: recursive

- name: Get changed files
id: changes
uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
with:
list-files: json
filters: |
all:
- added|modified: '**/*'

- name: Setup SSH agent
if: env.SSH_PRIVATE_KEY != ''
uses: webfactory/[email protected]
with:
ssh-private-key: ${{ env.SSH_PRIVATE_KEY }}

- uses: actions/setup-python@v6
with:
python-version: "3.13"

- name: Install Rust Toolchain
run: |
rustup toolchain install stable --profile minimal --no-self-update
Expand All @@ -58,7 +63,34 @@ jobs:
with:
key: ${{ github.job }}

- run: make style lint
- uses: astral-sh/setup-uv@884ad927a57e558e7a70b92f2bccf9198a4be546 # v6
with:
version: '0.8.2'
# we just cache the venv-dir directly in action-setup-venv
enable-cache: false

- uses: getsentry/action-setup-venv@0958463ee0e02b9e8aa8f8e031afae1f84b80881 # v3.0.0
with:
cache-dependency-path: uv.lock
install-cmd: uv sync --frozen --only-dev --active

- uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
with:
path: ~/.cache/pre-commit
key: cache-epoch-1|${{ env.pythonLocation }}|${{ hashFiles('.pre-commit-config.yaml', 'uv.lock') }}

- name: Setup pre-commit
run: pre-commit install-hooks

- name: Run pre-commit
run: |
jq '.[]' --raw-output <<< '${{steps.changes.outputs.all_files}}' |
# Run pre-commit to lint and format check files that were changed (but not deleted)
xargs pre-commit run --files

# running lint-python will unnecessarily go through setup-venv via devenv
# we want to take advantage of cached action-setup-venv
- run: make style-rust lint-rust

- name: Check Docs
run: cargo doc --workspace --all-features --no-deps --document-private-items
Expand Down Expand Up @@ -214,19 +246,23 @@ jobs:
- name: Install Rust Toolchain
run: rustup toolchain install stable --profile minimal --no-self-update

- uses: actions/setup-python@v6
- uses: swatinem/rust-cache@v2
with:
python-version: "3.13"
key: ${{ github.job }}

- name: Install Dependencies
run: pip install -U pytest
- uses: astral-sh/setup-uv@884ad927a57e558e7a70b92f2bccf9198a4be546 # v6
with:
version: '0.8.2'
# we just cache the venv-dir directly in action-setup-venv
enable-cache: false

- uses: swatinem/rust-cache@v2
- uses: getsentry/action-setup-venv@0958463ee0e02b9e8aa8f8e031afae1f84b80881 # v3.0.0
with:
key: ${{ github.job }}
cache-dependency-path: uv.lock
install-cmd: uv sync --frozen --active

- name: Build and Install Library
run: pip install -v --editable py
run: uv pip install py/
env:
RELAY_DEBUG: 1

Expand Down Expand Up @@ -750,9 +786,16 @@ jobs:
with:
ssh-private-key: ${{ env.SSH_PRIVATE_KEY }}

- uses: actions/setup-python@v6
- uses: astral-sh/setup-uv@884ad927a57e558e7a70b92f2bccf9198a4be546 # v6
with:
python-version: "3.13"
version: '0.8.2'
# we just cache the venv-dir directly in action-setup-venv
enable-cache: false

- uses: getsentry/action-setup-venv@0958463ee0e02b9e8aa8f8e031afae1f84b80881 # v3.0.0
with:
cache-dependency-path: uv.lock
install-cmd: uv sync --frozen --only-dev --active

- run: make test-integration
env:
Expand Down Expand Up @@ -840,13 +883,22 @@ jobs:
docker compose logs

validate-devservices-config:
runs-on: ubuntu-24.04
needs: devservices-files-changed
if: needs.devservices-files-changed.outputs.devservices-files-changed == 'true'
steps:
- uses: actions/checkout@ff7abcd0c3c05ccf6adc123a8cd1fd4fb30fb493 # v4.1.7
name: Checkout repository
- uses: getsentry/action-validate-devservices-config@02a078d1280293e6598cabfbd318a01609c12c83
name: Validate devservices config
with:
requirements-file-path: requirements-dev.txt
runs-on: ubuntu-24.04
needs: devservices-files-changed
if: needs.devservices-files-changed.outputs.devservices-files-changed == 'true'
steps:
- uses: actions/[email protected]
name: Checkout repository

- name: Get devservices version
id: get-devservices-version
run: |
awk -F'"' '
/name/ { pkg = $2 }
/version/ { if (pkg == "devservices") print "version="$2 }
' uv.lock >> $GITHUB_OUTPUT

- uses: getsentry/action-validate-devservices-config@711ae7221998ddf81211f25f5e3873ecffd22387
name: Validate devservices config
with:
devservices-version: ${{ steps.get-devservices-version.outputs.version }}
37 changes: 36 additions & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,39 @@ repos:
rev: 0.16.0
hooks:
- id: check-github-actions
- id: check-github-workflows
# TODO: reactivate when fixed
# - id: check-github-workflows
Comment on lines +6 to +7
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this TODO for this PR, or for later?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


- repo: local
hooks:
# Configuration for black exists in pyproject.toml,
# but we let pre-commit take care of the file filtering.
- id: black
name: black
entry: .venv/bin/black
language: system
types_or: [python, pyi]
require_serial: true
# Configuration for flake8 exists in setup.cfg,
# but we let pre-commit take care of the file filtering.
- id: flake8
name: flake8
entry: .venv/bin/flake8
language: system
types: [python]
require_serial: true
- id: mypy
name: mypy
entry: .venv/bin/mypy
language: system
types: [python]
require_serial: true
- id: rustfmt
name: format rust code
language: system
types: [rust]
# keep edition in sync with Cargo.toml
# There is no way to run cargo fmt for specific files,
# rustfmt can do it but doesn't read Cargo.toml.
# https://github.com/rust-lang/rustfmt/issues/4485
entry: rustfmt --edition=2024
2 changes: 1 addition & 1 deletion .python-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
3.11.9
3.13.5
3 changes: 3 additions & 0 deletions Brewfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
brew 'librdkafka'

brew 'rustup'
Loading