Tests for multiple OS families #6275
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: tests | |
on: | |
push: | |
branches: | |
- stable | |
- dev | |
pull_request: | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.event.pull_request.number || github.ref }} | |
cancel-in-progress: true | |
jobs: | |
lint: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: psf/black@stable | |
with: | |
options: "--check" | |
- name: Install Python 3 | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.x" | |
- name: Install dependencies | |
run: | | |
pip install flake8 | |
- name: flake8 | |
run: | | |
flake8 | |
test: | |
needs: lint | |
runs-on: ubuntu-latest | |
strategy: | |
# if one python version fails, let the others finish | |
fail-fast: false | |
matrix: | |
python-version: ["3.9", "3.10", "3.11", "3.12"] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install dependencies | |
run: | | |
pip install poetry | |
poetry install | |
- name: Run tests | |
run: | | |
poetry run pytest --exitfirst --reruns 2 -o timeout_func_only=true --timeout 1200 --disable-warnings --log-cli-level=INFO --cov-config=bbot/test/coverage.cfg --cov-report xml:cov.xml --cov=bbot . | |
- name: Upload Code Coverage | |
uses: codecov/codecov-action@v3 | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
files: ./cov.xml | |
verbose: true | |
test-distros: | |
needs: lint | |
runs-on: ubuntu-latest | |
container: | |
image: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: ["ubuntu:20.04", "ubuntu:22.04", "ubuntu:24.04", "debian", "archlinux", "fedora", "gentoo/python", "python:3.10-alpine"] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Python and Poetry | |
run: | | |
if [ -f /etc/debian_version ]; then | |
apt-get update | |
apt-get install -y python3 python3-pip python3-poetry | |
elif [ -f /etc/arch-release ]; then | |
pacman -Syu --noconfirm python python-pip poetry | |
elif [ -f /etc/fedora-release ]; then | |
dnf install -y python3 python3-pip poetry | |
elif [ -f /etc/gentoo-release ]; then | |
emerge --update --newuse dev-python/poetry | |
elif [ -f /etc/alpine-release ]; then | |
apk add --no-cache python3 py3-pip py3-poetry | |
fi | |
- name: Install dependencies | |
run: | | |
poetry install | |
- name: Run tests | |
run: | | |
poetry run pytest --reruns 2 -o timeout_func_only=true --timeout 1200 --disable-warnings --log-cli-level=DEBUG . | |
publish_code: | |
needs: test | |
runs-on: ubuntu-latest | |
if: github.event_name == 'push' && (github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/stable') | |
continue-on-error: true | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.x" | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install poetry build | |
poetry self add "poetry-dynamic-versioning[plugin]" | |
- name: Build Pypi package | |
if: github.ref == 'refs/heads/stable' || github.ref == 'refs/heads/dev' | |
run: python -m build | |
- name: Publish Pypi package | |
if: github.ref == 'refs/heads/stable' || github.ref == 'refs/heads/dev' | |
uses: pypa/gh-action-pypi-publish@release/v1.5 | |
with: | |
password: ${{ secrets.PYPI_API_TOKEN }} | |
- name: Get BBOT version | |
id: version | |
run: echo "BBOT_VERSION=$(poetry version | cut -d' ' -f2)" >> $GITHUB_OUTPUT | |
- name: Publish to Docker Hub (dev) | |
if: github.event_name == 'push' && github.ref == 'refs/heads/dev' | |
uses: elgohr/Publish-Docker-Github-Action@v5 | |
with: | |
name: blacklanternsecurity/bbot | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
tags: "latest,dev,${{ steps.version.outputs.BBOT_VERSION }}" | |
- name: Publish to Docker Hub (stable) | |
if: github.event_name == 'push' && github.ref == 'refs/heads/stable' | |
uses: elgohr/Publish-Docker-Github-Action@v5 | |
with: | |
name: blacklanternsecurity/bbot | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
tags: "stable,${{ steps.version.outputs.BBOT_VERSION }}" | |
- name: Docker Hub Description | |
if: github.event_name == 'push' && github.ref == 'refs/heads/dev' | |
uses: peter-evans/dockerhub-description@v3 | |
with: | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
repository: blacklanternsecurity/bbot | |
outputs: | |
BBOT_VERSION: ${{ steps.version.outputs.BBOT_VERSION }} | |
# tag_commit: | |
# needs: publish_code | |
# runs-on: ubuntu-latest | |
# if: github.event_name == 'push' && github.ref == 'refs/heads/stable' | |
# steps: | |
# - uses: actions/checkout@v4 | |
# with: | |
# ref: ${{ github.head_ref }} | |
# fetch-depth: 0 # Fetch all history for all tags and branches | |
# - name: Configure git | |
# run: | | |
# git config --local user.email "[email protected]" | |
# git config --local user.name "GitHub Actions" | |
# - name: Tag commit | |
# run: | | |
# VERSION="${{ needs.publish_code.outputs.BBOT_VERSION }}" | |
# if [[ "${{ github.ref }}" == "refs/heads/dev" ]]; then | |
# TAG_MESSAGE="Dev Release $VERSION" | |
# elif [[ "${{ github.ref }}" == "refs/heads/stable" ]]; then | |
# TAG_MESSAGE="Stable Release $VERSION" | |
# fi | |
# git tag -a $VERSION -m "$TAG_MESSAGE" | |
# git push origin --tags |