Use mold as the linker in CI #7571
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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: Check mold | |
run: | | |
# readelf -p .comment nautilus_core/target/debug/libnautilus_pyo3.d | |
readelf -p .comment nautilus_core/target/debug/libnautilus_pyo3.dylib | |
readelf -p .comment nautilus_core/target/debug/libnautilus_network.a | |
# readelf -p .comment nautilus_core/target/debug/libnautilus_network.d | |
readelf -p .comment nautilus_core/target/debug/libnautilus_network.dylib | |
# readelf -p .comment nautilus_core/target/debug/libnautilus_network.rlib | |
- 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 |