Micro Benchmarks #1364
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
# Workflow which runs micro benchmarks on nightly basis | |
# We run it nightly instead on every PR / merge to master since some of those benchmarks take quite a while. | |
name: Micro Benchmarks | |
on: | |
schedule: | |
- cron: '30 3 * * *' | |
jobs: | |
# Special job which automatically cancels old runs for the same branch, prevents runs for the | |
# same file set which has already passed, etc. | |
pre_job: | |
name: Skip Duplicate Jobs Pre Job | |
runs-on: ubuntu-20.04 | |
outputs: | |
should_skip: ${{ steps.skip_check.outputs.should_skip }} | |
steps: | |
- id: skip_check | |
uses: fkirc/skip-duplicate-actions@4c656bbdb6906310fa6213604828008bc28fe55d # v3.3.0 | |
with: | |
cancel_others: 'true' | |
github_token: ${{ github.token }} | |
micro-benchmarks: | |
needs: pre_job | |
# NOTE: We always want to run job on master since we run some additional checks there (code | |
# coverage, etc) | |
if: ${{ needs.pre_job.outputs.should_skip != 'true' || github.ref == 'refs/heads/master' }} | |
name: '${{ matrix.name }} - Python ${{ matrix.python-version-short }}' | |
runs-on: ubuntu-20.04 | |
strategy: | |
fail-fast: false | |
matrix: | |
# NOTE: We need to use full Python version as part of Python deps cache key otherwise | |
# setup virtualenv step will fail. | |
include: | |
- name: 'Microbenchmarks' | |
task: 'micro-benchmarks' | |
shard: {k: 0, n: 1} | |
python-version-short: '3.8' | |
python-version: '3.8.10' | |
- name: 'Microbenchmarks' | |
task: 'micro-benchmarks' | |
shard: {k: 0, n: 1} | |
python-version-short: '3.9' | |
python-version: '3.9.14' | |
services: | |
mongo: | |
image: mongo:7.0 | |
ports: | |
- 27017:27017 | |
rabbitmq: | |
image: rabbitmq:3.8-management | |
options: >- | |
--name rabbitmq | |
ports: | |
- 5671:5671/tcp # AMQP SSL port | |
- 5672:5672/tcp # AMQP standard port | |
- 15672:15672/tcp # Management: HTTP, CLI | |
env: | |
TASK: '${{ matrix.task }}' | |
NODE_TOTAL: '${{ matrix.shard.n }}' | |
NODE_INDEX: '${{ matrix.shard.k }}' | |
COLUMNS: '120' | |
ST2_CI: 'true' | |
# GitHub is juggling how to set vars for multiple shells. Protect our PATH assumptions. | |
PATH: /home/runner/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: 'Set up Python (${{ matrix.python-version }}) and Cache Deps' | |
uses: ./.github/actions/setup-python | |
with: | |
python-version: '${{ matrix.python-version }}' | |
- name: Cache and Install APT Dependencies | |
uses: ./.github/actions/apt-packages | |
- name: Install virtualenv | |
run: | | |
./scripts/github/install-virtualenv.sh | |
- name: Install requirements | |
run: | | |
./scripts/ci/install-requirements.sh | |
- name: Print versions | |
run: | | |
./scripts/ci/print-versions.sh | |
- name: Run Micro Benchmarks | |
timeout-minutes: 30 | |
# use: script -e -c to print colors | |
run: | | |
script -e -c "make ${TASK}" && exit 0 | |
- name: Upload Histograms | |
uses: actions/upload-artifact@v4 | |
with: | |
name: benchmark_histograms-py${{ matrix.python-version }} | |
path: benchmark_histograms/ | |
retention-days: 30 | |
slack-notification: | |
name: Slack notification for failed builds | |
if: always() | |
needs: | |
- micro-benchmarks | |
runs-on: ubuntu-20.04 | |
steps: | |
- name: Workflow conclusion | |
# this step creates an environment variable WORKFLOW_CONCLUSION and is the most reliable way to check the status of previous jobs | |
uses: technote-space/workflow-conclusion-action@v2 | |
- name: CI Run Failure Slack Notification | |
if: ${{ env.WORKFLOW_CONCLUSION == 'failure' }} | |
env: | |
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} | |
uses: voxmedia/github-action-slack-notify-build@v1 | |
with: | |
channel: development | |
status: FAILED | |
color: danger |