Skip to content

Improve Actors guide #7566

Improve Actors guide

Improve Actors guide #7566

Workflow file for this run

name: build
on:
push:
branches: [master, nightly, develop]
pull_request:
branches: [develop]
jobs:
pre-commit:
name: pre-commit
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Common setup
uses: ./.github/actions/common-setup
with:
python-version: "3.11"
- name: Run pre-commit
continue-on-error: true
run: make pre-commit || echo "PRECOMMIT_FAILED=true" > $GITHUB_ENV
# https://docs.github.com/en/rest/issues/comments#create-an-issue-comment
- name: Add PR comment on failure
if: env.PRECOMMIT_FAILED == 'true' && github.event_name == 'pull_request'
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: 'Thank you for your contribution! 🙏\n\nThe pre-commit checks failed, but this is easy to fix. You\'ll need to run:\n\n```bash\nmake pre-commit\n# or\npre-commit run --all-files\n```\n\nThis will automatically fix most formatting issues. Just commit any changes and push again.\n\nSee our [CONTRIBUTING.md](https://github.com/nautechsystems/nautilus_trader/blob/develop/CONTRIBUTING.md) guide for more details.'
})
- name: Fail job if pre-commit failed
if: env.PRECOMMIT_FAILED == 'true'
run: |
echo "Pre-commit checks failed, exiting"
exit 1
build-linux-standard-precision:
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
python-version:
- "3.12"
defaults:
run:
shell: bash
name: build - standard-precision (${{ matrix.os }})
runs-on: ${{ matrix.os }}
needs:
- pre-commit
env:
BUILD_MODE: debug
HIGH_PRECISION: false
RUST_BACKTRACE: 1
services:
redis:
image: redis
ports:
- 6379:6379
options: >-
--health-cmd "redis-cli ping"
--health-interval 10s
--health-timeout 5s
--health-retries 5
postgres:
image: postgres
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: pass
POSTGRES_DB: nautilus
ports:
- 5432:5432
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Common setup
uses: ./.github/actions/common-setup
with:
python-version: ${{ matrix.python-version }}
- name: Install Nautilus CLI and run init postgres
run: |
make install-cli
nautilus database init --schema ${{ github.workspace }}/schema/sql
env:
POSTGRES_HOST: localhost
POSTGRES_PORT: 5432
POSTGRES_USERNAME: postgres
POSTGRES_PASSWORD: pass
POSTGRES_DATABASE: nautilus
- name: Run Rust tests (with standard-precision)
run: make cargo-test-standard-precision
- name: Build and install wheel
uses: ./.github/actions/common-wheel-build
with:
python-version: ${{ matrix.python-version }}
- name: Run tests
run: |
pytest --ignore=tests/performance_tests
build-linux:
strategy:
fail-fast: false
matrix:
os:
- ubuntu-22.04
python-version:
- "3.11"
- "3.12"
defaults:
run:
shell: bash
name: build - python ${{ matrix.python-version }} (${{ matrix.os }})
runs-on: ${{ matrix.os }}
needs:
- pre-commit
env:
BUILD_MODE: release
RUST_BACKTRACE: 1
services:
redis:
image: redis
ports:
- 6379:6379
options: >-
--health-cmd "redis-cli ping"
--health-interval 10s
--health-timeout 5s
--health-retries 5
postgres:
image: postgres
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: pass
POSTGRES_DB: nautilus
ports:
- 5432:5432
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Common setup
uses: ./.github/actions/common-setup
with:
python-version: ${{ matrix.python-version }}
- name: Install Nautilus CLI and run init postgres
run: |
make install-cli
nautilus database init --schema ${{ github.workspace }}/schema/sql
env:
POSTGRES_HOST: localhost
POSTGRES_PORT: 5432
POSTGRES_USERNAME: postgres
POSTGRES_PASSWORD: pass
POSTGRES_DATABASE: nautilus
- name: Run Rust tests
run: make cargo-test
- name: Build and install wheel
uses: ./.github/actions/common-wheel-build
with:
python-version: ${{ matrix.python-version }}
- name: Run tests
run: |
pytest --ignore=tests/performance_tests
- name: Upload wheel artifact
uses: ./.github/actions/upload-artifact-wheel
build-macos:
strategy:
fail-fast: false
matrix:
os:
- macos-latest
python-version:
- "3.11"
- "3.12"
defaults:
run:
shell: bash
name: build - python ${{ matrix.python-version }} (${{ matrix.os }})
runs-on: ${{ matrix.os }}
# Pause macOS jobs on develop branch for now (they take 1-1.5 hrs again)
if: >
!( (github.event_name == 'push' && github.ref_name == 'develop')
|| (github.event_name == 'pull_request' && github.base_ref == 'develop') )
needs:
- pre-commit
env:
BUILD_MODE: release
RUST_BACKTRACE: 1
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Common setup
uses: ./.github/actions/common-setup
with:
python-version: ${{ matrix.python-version }}
- name: Run Rust tests
run: make cargo-test
- name: Build and install wheel
uses: ./.github/actions/common-wheel-build
with:
python-version: ${{ matrix.python-version }}
- name: Run tests
run: |
pytest --ignore=tests/performance_tests
- name: Upload wheel artifact
uses: ./.github/actions/upload-artifact-wheel
build-windows:
strategy:
fail-fast: false
matrix:
os:
- windows-latest
python-version:
- "3.11"
- "3.12"
defaults:
run:
shell: bash
name: build - python ${{ matrix.python-version }} (${{ matrix.os }})
runs-on: ${{ matrix.os }}
needs:
- pre-commit
env:
BUILD_MODE: debug # Not building wheels, so debug is fine
HIGH_PRECISION: false
PARALLEL_BUILD: false
RUST_BACKTRACE: 1
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Common setup
uses: ./.github/actions/common-setup
with:
python-version: ${{ matrix.python-version }}
# Run tests without parallel build (avoids linker errors)
- name: Run tests
run: |
poetry install --with test --all-extras
poetry run pytest --ignore=tests/performance_tests
publish-wheels-develop:
name: publish-wheels-develop
runs-on: ubuntu-latest
needs:
- build-linux
# - build-macos # Reinstate this when macos runs on every build again
# if: github.event_name == 'push' && (github.ref == 'refs/heads/develop' || github.ref == 'refs/heads/nightly' || github.ref == 'refs/heads/master')
if: >
github.event_name == 'push' &&
github.ref == 'refs/heads/develop'
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
CLOUDFLARE_R2_URL: ${{ secrets.CLOUDFLARE_R2_URL }}
CLOUDFLARE_R2_BUCKET_NAME: "packages"
CLOUDFLARE_R2_REGION: "auto"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Publish wheels
uses: ./.github/actions/publish-wheels
# Temporary additional publish step while macos wheels are paused on develop branch
publish-wheels:
name: publish-wheels
runs-on: ubuntu-latest
needs:
- build-linux
- build-macos
if: >
github.event_name == 'push' &&
(github.ref == 'refs/heads/nightly' || github.ref == 'refs/heads/master')
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
CLOUDFLARE_R2_URL: ${{ secrets.CLOUDFLARE_R2_URL }}
CLOUDFLARE_R2_BUCKET_NAME: "packages"
CLOUDFLARE_R2_REGION: "auto"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Publish wheels
uses: ./.github/actions/publish-wheels