Skip to content

Implement processing of market-to-limit orders in matching engine #8035

Implement processing of market-to-limit orders in matching engine

Implement processing of market-to-limit orders in matching engine #8035

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
permissions:
contents: read
issues: write
pull-requests: write
checks: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Common setup
uses: ./.github/actions/common-setup
with:
python-version: "3.11"
free-disk-space: "true"
- name: Run pre-commit
continue-on-error: true
run: make pre-commit || echo "PRECOMMIT_FAILED=true" >> $GITHUB_ENV
- name: Set pre-commit status
if: always()
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
try {
const conclusion = process.env.PRECOMMIT_FAILED === 'true' ? 'failure' : 'success';
await github.rest.checks.create({
owner: context.repo.owner,
repo: context.repo.repo,
name: 'pre-commit result',
head_sha: context.sha,
status: 'completed',
conclusion: conclusion,
output: {
title: conclusion === 'failure' ? 'Pre-commit checks failed' : 'Pre-commit checks passed',
summary: conclusion === 'failure'
? 'Please run `make pre-commit` (or `pre-commit run --all-files`) to fix formatting issues'
: 'All pre-commit checks passed'
}
});
} catch (error) {
if (error.status === 403) {
console.log('No permissions to create check run - this is expected for PRs from forks');
} else {
throw error;
}
}
- 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 }}
free-disk-space: "true"
- 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: Cached test data
uses: ./.github/actions/common-test-data
- 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 }}
free-disk-space: "true"
- 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: Cached test data
uses: ./.github/actions/common-test-data
- 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)
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: Cached test data
uses: ./.github/actions/common-test-data
- 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 }}
# Pause windows jobs on develop branch for now (they take ~1 hr)
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
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 }}
free-disk-space: "true"
- name: Build and install wheel
uses: ./.github/actions/common-wheel-build
with:
python-version: ${{ matrix.python-version }}
- name: Cached test data
uses: ./.github/actions/common-test-data
- name: Run tests
run: |
pytest --ignore=tests/performance_tests
- name: Upload wheel artifact
uses: ./.github/actions/upload-artifact-wheel
publish-wheels-develop:
name: publish-wheels-develop
runs-on: ubuntu-latest
needs:
- build-linux
# - build-macos # Reinstate this when/if macos runs on every build
# - build-windows # Reinstate this when/if windows runs on every build
# 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
- build-windows
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