Skip to content
Open
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.
Copy link
Member Author

Choose a reason for hiding this comment

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

devenv/sync.py and .pre-commit-config.yaml are all using .venv/bin explicitly so this policy you have here is still being respected! although you will need a global install of devenv: https://github.com/getsentry/devenv/?tab=readme-ov-file#install

(chances are and i would hope relay devs already have devenv installed as it is required for sentry development)

Copy link
Member Author

Choose a reason for hiding this comment

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

actually well it is needed to put .devenv/bin on path so you have access to devenv's uv at .devenv/bin/uv


# '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
68 changes: 40 additions & 28 deletions .github/workflows/build_library.yml
Copy link
Member

Choose a reason for hiding this comment

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

Were you able to test this workflow? Any chance we will face surprises next time we want to release the library?

Copy link
Member Author

Choose a reason for hiding this comment

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

Ah good catch, I'll run it and see!

Copy link
Member Author

Choose a reason for hiding this comment

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

yup it's totally broken haha, will fix

Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
name: Library Release Build

on:
push:
branches:
- release-library/**
pull_request:
# branches:
# - release-library/**

env:
CARGO_TERM_COLOR: always
Expand Down Expand Up @@ -69,15 +69,20 @@ jobs:
rustup override set stable
rustup target add --toolchain stable ${{ matrix.target }}

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

- uses: getsentry/action-setup-venv@3a832a9604b3e1a4202ae559248f26867b467cc7 # v2.1.1
with:
python-version: 3.11.9
cache-dependency-path: uv.lock
install-cmd: uv sync --frozen --only-dev --active

- name: Build Wheel
run: |
pip install wheel
python setup.py bdist_wheel -p ${{ matrix.py-platform }}
working-directory: py
run: uv build --wheel ./py -- --plat-name=${{ matrix.py-platform }}
env:
# consumed by cargo and setup.py to obtain the target dir
CARGO_BUILD_TARGET: ${{ matrix.target }}
Expand All @@ -99,13 +104,20 @@ jobs:
with:
submodules: recursive

- uses: actions/setup-python@v5
- 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@3a832a9604b3e1a4202ae559248f26867b467cc7 # v2.1.1
with:
python-version: "3.10"
python-version: 3.11.9
cache-dependency-path: uv.lock
install-cmd: uv sync --frozen --only-dev --active

- name: Build sdist
run: python setup.py sdist
working-directory: py
run: uv build --sdist ./py

- uses: actions/upload-artifact@v4
with:
Expand All @@ -115,18 +127,18 @@ jobs:
# since this artifact will be merged, compression is not necessary
compression-level: '0'

merge:
name: Create Release Artifact
runs-on: ubuntu-latest
needs: [linux, macos, sdist]
steps:
# Note: due to the immutability of artifacts in upload-artifact v4,
# there cannot be mutliple upload-artifacts with the same name, in a sha's workflow runs.
# However in this case it is fine because this only runs on release-library/** branches,
# and the other runs on release/** branches.
- uses: actions/upload-artifact/merge@v4
with:
# Craft expects release assets to be a single artifact named after the sha.
name: ${{ github.sha }}
pattern: artifact-*
delete-merged: true
# merge:
# name: Create Release Artifact
# runs-on: ubuntu-latest
# needs: [linux, macos, sdist]
# steps:
# # Note: due to the immutability of artifacts in upload-artifact v4,
# # there cannot be mutliple upload-artifacts with the same name, in a sha's workflow runs.
# # However in this case it is fine because this only runs on release-library/** branches,
# # and the other runs on release/** branches.
# - uses: actions/upload-artifact/merge@v4
# with:
# # Craft expects release assets to be a single artifact named after the sha.
# name: ${{ github.sha }}
# pattern: artifact-*
# delete-merged: true
99 changes: 76 additions & 23 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@0bc4621a3135347011ad047f9ecf449bf72ce2bd # v3.0.0
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@v5
with:
python-version: "3.11"

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

- 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@3a832a9604b3e1a4202ae559248f26867b467cc7 # v2.1.1
with:
python-version: 3.11.9
cache-dependency-path: uv.lock
install-cmd: uv sync --frozen --only-dev --active

- uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.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

- run: make style lint

- name: Check Docs
Expand Down Expand Up @@ -214,19 +245,24 @@ jobs:
- name: Install Rust Toolchain
run: rustup toolchain install stable --profile minimal --no-self-update

- uses: actions/setup-python@v5
- uses: swatinem/rust-cache@v2
with:
python-version: "3.10"
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@3a832a9604b3e1a4202ae559248f26867b467cc7 # v2.1.1
with:
key: ${{ github.job }}
python-version: 3.11.9
cache-dependency-path: uv.lock
install-cmd: uv sync --frozen --only-dev --active

- name: Build and Install Library
run: pip install -v --editable py
run: uv sync --frozen --verbose --active
env:
RELAY_DEBUG: 1

Expand Down Expand Up @@ -749,9 +785,17 @@ jobs:
with:
ssh-private-key: ${{ env.SSH_PRIVATE_KEY }}

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

- uses: getsentry/action-setup-venv@3a832a9604b3e1a4202ae559248f26867b467cc7 # v2.1.1
with:
python-version: 3.11.9
cache-dependency-path: uv.lock
install-cmd: uv sync --frozen --only-dev --active

- run: make test-integration
env:
Expand Down Expand Up @@ -838,13 +882,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/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
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
Copy link
Contributor

Choose a reason for hiding this comment

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

What is this referring to? What needs to be fixed?

Copy link
Member Author

Choose a reason for hiding this comment

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

https://gist.github.com/joshuarli/36587aeb18445bf18f36abcd4b82382e
(upgraded to 0.33.0 since in previous versions output is a lot less readable)

mostly complaining about 'uses' is a required property which... it is not? lol

# - id: check-github-workflows

- repo: local
Copy link
Member Author

Choose a reason for hiding this comment

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

pre-commit now runs in ci and now runs black/flake8/mypy (locked+installed via uv) on python files!

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
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
Loading