Skip to content

attempt to cache virtual environment to share between CI jobs #2

attempt to cache virtual environment to share between CI jobs

attempt to cache virtual environment to share between CI jobs #2

Workflow file for this run

name: setup
on:
push:
branches:
- main
pull_request:
jobs:
setup-and-upload:
name: Set up virtual environment
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: install uv
run: curl -LsSf https://astral.sh/uv/install.sh | sh
- name: install venv
run: uv venv .venv -p 3.10
- name: install requirements
run: |
source .venv/bin/activate
uv pip install --upgrade -r requirements.txt
uv pip install --upgrade -r requirements-rl.txt
uv pip install --upgrade -r requirements-dev.txt
- name: Upload virtual environment
uses: actions/upload-artifact@v3
with:
name: venv
path: .venv
lint:
name: Lint
runs-on: ubuntu-latest
needs: setup-and-upload
steps:
- uses: actions/checkout@v3
with:
token: ${{github.token}}
- name: Download virtual environment
uses: actions/download-artifact@v3
with:
name: venv
path: .venv
- name: run black
run: |
source .venv/bin/activate
python -m black --config pyproject.toml --check --diff .
- name: get all Python files
id: list_files
run: |
echo "files=$(git ls-files '*.py' '*.pyi' | xargs)" >> $GITHUB_OUTPUT
- name: run Pylint on files
run: |
source .venv/bin/activate
files="${{ steps.list_files.outputs.files }}"
if [ -n "$files" ]; then
pylint --rcfile=.pylintrc $files
else
echo "No Python files found."
fi
static:
name: Static
runs-on: ubuntu-latest
needs: setup-and-upload
steps:
- uses: actions/checkout@v3
with:
token: ${{github.token}}
- name: Download virtual environment
uses: actions/download-artifact@v3
with:
name: venv
path: .venv
- name: Analyse code with pyright
run: |
source .venv/bin/activate
python -m pyright $(git ls-files '*.py' '*.pyi')
test:
name: Test
runs-on: ubuntu-latest
needs: setup-and-upload
steps:
- uses: actions/checkout@v3
with:
token: ${{github.token}}
- name: install node
uses: actions/setup-node@v3
with:
node-version: 16.x
- name: install packages
uses: borales/actions-yarn@v4
with:
cmd: install # will run `yarn install` command
env:
# A warning is thrown here unnecessarily. tracking issue here:
# https://github.com/github/vscode-github-actions/issues/222
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} # if needed
- name: install foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: nightly
- name: set up python
uses: actions/setup-python@v4
with:
python-version: "3.10"
cache: "pip"
token: ${{github.token}}
- name: Download virtual environment
uses: actions/download-artifact@v3
with:
name: venv
path: .venv
- name: run pytest with coverage
run: |
source .venv/bin/activate
IN_CI=true coverage run -m pytest
- name: generate coverage report
run: |
source .venv/bin/activate
coverage xml -i
coverage html -i
- name: upload coverage report to Codecov
uses: codecov/codecov-action@v3
with:
flags: unittests
fail_ci_if_error: true
# A warning is thrown here unnecessarily. tracking issue here:
# https://github.com/github/vscode-github-actions/issues/222
token: ${{ secrets.CODECOV_TOKEN }}
docker:
name: Docker image
runs-on: ubuntu-latest
needs: setup-and-upload
permissions:
contents: read
packages: write
steps:
- name: Check out code
uses: actions/checkout@v3
with:
submodules: recursive
token: ${{secrets.GITHUB_TOKEN}}
- name: Log in to the Container registry
uses: docker/[email protected]
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/[email protected]
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
# Add a version tag when a valid semver tag is pushed.
type=semver,pattern={{version}}
# Add the edge tag to every image to represent the latest commit to main
type=edge,branch=main
- name: Build and push Docker image
uses: docker/[email protected]
with:
context: .
push: true
file: ./Dockerfile
tags: |
${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}