Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
ab94e60
Modernize conda environment (#34)
sdvillal Mar 23, 2026
ce70ebb
fix linter problems
jandom Mar 23, 2026
9b1749c
add pre-commit
jandom Mar 23, 2026
6fbef74
Merge branch 'main' into pixi-beta
jandom Mar 26, 2026
57736cd
Merge branch 'public-main' into pixi-beta
jandom Mar 31, 2026
784502b
Merge branch 'public-main' into pixi-beta
jandom Apr 4, 2026
f696d6c
add pixi.excalidraw to docs
jandom Apr 7, 2026
4ce0467
Merge branch 'public-main' into pixi-beta
jandom Apr 8, 2026
c101a86
remove blackwell build instructions (obsolete)
jandom Apr 8, 2026
cf4bfb6
update docs to recommend pixi
jandom Apr 8, 2026
4e36782
better docs on pixi
jandom Apr 8, 2026
48e06e3
update pixi.lock
jandom Apr 8, 2026
8a4a26b
docker build and tests for pixi
jandom Apr 8, 2026
3f9ed35
Merge branch 'main' into pixi-beta
jandom Apr 8, 2026
888f070
set a sensible 2mb default
jandom Apr 8, 2026
39ddce9
more context manager plus dirty dataclass
jandom Apr 8, 2026
07d3454
unit tests
jandom Apr 9, 2026
5e42337
Merge branch 'public-main' into pixi-beta
jandom Apr 9, 2026
8a745e9
more linting
jandom Apr 9, 2026
ba24b95
missed a dep: regenerate pixi.lock
jandom Apr 9, 2026
68e743e
Merge branch 'main' into pixi-beta
jandom Apr 9, 2026
feeaacd
remove duplicate projects
jandom Apr 9, 2026
a6df9f7
Merge branch 'main' into pixi-beta
jandom Apr 14, 2026
ba83d3e
review: comments from Jennifer
jandom Apr 15, 2026
bc7badc
Merge branch 'public-main' into pixi-beta
jandom Apr 15, 2026
299e596
update pixi.lock
jandom Apr 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
# Allow specific files
!CITATION.cff
!LICENSE
!pixi.toml
!pixi.lock
!pyproject.toml
!README.md

Expand Down
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# SCM syntax highlighting & preventing 3-way merges
pixi.lock merge=binary linguist-language=YAML linguist-generated=true
Original file line number Diff line number Diff line change
Expand Up @@ -67,16 +67,16 @@ jobs:
uses: docker/build-push-action@v7.1.0
with:
context: .
file: docker/Dockerfile
file: docker/Dockerfile.conda
target: test
push: true
build-args: |
CUDA_BASE_IMAGE_TAG=${{ inputs.cuda_base_image_tag }}
BUILD_MODE=${{ inputs.build_mode }}
tags: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:test-${{ inputs.cuda_base_image_tag }}-${{ github.sha }}
cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:cache-${{ inputs.cuda_base_image_tag }}
cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:cache-${{ inputs.cuda_base_image_tag }},mode=max
cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:cache-conda-${{ inputs.cuda_base_image_tag }}
cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:cache-conda-${{ inputs.cuda_base_image_tag }},mode=max

- name: Create parameter cache directory
run: mkdir -p ~/.openfold3
Expand Down
128 changes: 128 additions & 0 deletions .github/workflows/ci-integration-test-pixi-reusable.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
name: Reusable Docker Test for running heavy test loads (Pixi)

on:
# Can only be called by another workflow, not directly by the user
workflow_call:
inputs:
pixi_env:
description: 'Pixi environment name (e.g., openfold3-cuda12, openfold3-cuda13)'
required: true
type: string
base_image:
description: 'Base Docker image'
required: false
type: string
default: 'ubuntu:22.04'

env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}/openfold3-docker

jobs:
start-aws-runner:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
outputs:
mapping: ${{ steps.aws-start.outputs.mapping }}
instances: ${{ steps.aws-start.outputs.instances }}
steps:
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v6
with:
role-to-assume: arn:aws:iam::203627415330:role/of-gha-runner
aws-region: us-east-1
- name: Create cloud runner
id: aws-start
uses: omsf/start-aws-gha-runner@v1.1.1
with:
aws_image_id: ami-00839c71d8f6096b4 # Deep Learning Base AMI with Single CUDA (Ubuntu 22.04)
aws_instance_type: "g5.4xlarge" # A10G 64 GB
aws_home_dir: /home/ubuntu
aws_root_device_size: 200
env:
GH_PAT: ${{ secrets.GH_PAT }}

test-openfold-docker-pixi:
runs-on: ${{ fromJSON(needs.start-aws-runner.outputs.instances) }}
needs:
- start-aws-runner
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v6

- name: Log in to GHCR
uses: docker/login-action@v4
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4

- name: Build and push test image
uses: docker/build-push-action@v7
with:
context: .
file: docker/Dockerfile.pixi
target: test
push: true
build-args: |
PIXI_ENV=${{ inputs.pixi_env }}
BASE_IMAGE=${{ inputs.base_image }}
tags: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:test-pixi-${{ inputs.pixi_env }}-${{ github.sha }}
cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:cache-pixi-${{ inputs.pixi_env }}
cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:cache-pixi-${{ inputs.pixi_env }},mode=max

- name: Create parameter cache directory
run: mkdir -p ~/.openfold3

- name: Cache download of parameters
id: cache-openfold_parameters
uses: actions/cache@v4
with:
path: ~/.openfold3/
key: shared-params_of3
restore-keys: |
shared-params_of3

- name: Install AWS CLI and Download OpenFold parameters
if: steps.cache-openfold_parameters.outputs.cache-hit != 'true'
run: |
echo "Cache miss: Downloading OpenFold parameters..."
aws s3 cp s3://openfold3-data/openfold3-parameters/of3-p2-155k.pt ~/.openfold3/ --no-sign-request

- name: Run integration test
run: |
docker run --gpus all\
-v ${{ github.workspace }}:/opt/openfold3 \
-v ~/.openfold3:/root/.openfold3 \
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:test-pixi-${{ inputs.pixi_env }}-${{ github.sha }} \
pytest -x openfold3/tests/ -m slow -vvv

stop-aws-runner:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
needs:
- start-aws-runner
- test-openfold-docker-pixi
if: ${{ always() }}
steps:
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v6
with:
role-to-assume: arn:aws:iam::203627415330:role/of-gha-runner
aws-region: us-east-1
- name: Stop instances
uses: omsf/stop-aws-gha-runner@v1.0.0
with:
instance_mapping: ${{ needs.start-aws-runner.outputs.mapping }}
env:
GH_PAT: ${{ secrets.GH_PAT }}
Original file line number Diff line number Diff line change
Expand Up @@ -69,16 +69,16 @@ jobs:
uses: docker/build-push-action@v7.1.0
with:
context: .
file: docker/Dockerfile
file: docker/Dockerfile.conda
target: test
push: true
build-args: |
CUDA_BASE_IMAGE_TAG=${{ inputs.cuda_base_image_tag }}
BUILD_MODE=${{ inputs.build_mode }}
tags: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:test-${{ inputs.cuda_base_image_tag }}-${{ github.sha }}
cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:cache-${{ inputs.cuda_base_image_tag }}
cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:cache-${{ inputs.cuda_base_image_tag }},mode=max
cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:cache-conda-${{ inputs.cuda_base_image_tag }}
cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:cache-conda-${{ inputs.cuda_base_image_tag }},mode=max

- name: Run unit tests
run: |
Expand Down
132 changes: 132 additions & 0 deletions .github/workflows/ci-test-pixi-reusable.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
name: Reusable Docker Test (Pixi)

on:
# Can only be called by another workflow, not directly by the user
workflow_call:
inputs:
pixi_env:
description: 'Pixi environment name (e.g., openfold3-cuda12, openfold3-cuda13)'
required: true
type: string
base_image:
description: 'Base Docker image'
required: false
type: string
default: 'ubuntu:22.04'

env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}/openfold3-docker

jobs:
start-aws-runner:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
outputs:
mapping: ${{ steps.aws-start.outputs.mapping }}
instances: ${{ steps.aws-start.outputs.instances }}
steps:
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v6
with:
role-to-assume: arn:aws:iam::203627415330:role/of-gha-runner
aws-region: us-east-1
- name: Create cloud runner
id: aws-start
uses: omsf/start-aws-gha-runner@v1.1.1
with:
aws_image_id: ami-0754c6e75b3b97dcd # Deep Learning AMI Neuron (Ubuntu 22.04)
aws_instance_type: t3.2xlarge
aws_home_dir: /home/ubuntu
aws_root_device_size: 200
env:
GH_PAT: ${{ secrets.GH_PAT }}

test-openfold-docker-pixi:
runs-on: ${{ fromJSON(needs.start-aws-runner.outputs.instances) }}
needs:
- start-aws-runner
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v6
with:
ref: ${{ github.event.pull_request.head.sha || github.sha }}

- name: Log in to GHCR
uses: docker/login-action@v4
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4

- name: Build and push test image
uses: docker/build-push-action@v7
with:
context: .
file: docker/Dockerfile.pixi
target: test
push: true
build-args: |
PIXI_ENV=${{ inputs.pixi_env }}
BASE_IMAGE=${{ inputs.base_image }}
tags: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:test-pixi-${{ inputs.pixi_env }}-${{ github.sha }}
cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:cache-pixi-${{ inputs.pixi_env }}
cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:cache-pixi-${{ inputs.pixi_env }},mode=max

- name: Run unit tests
run: |
docker run \
-v ${{ github.workspace }}:/opt/openfold3 \
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:test-pixi-${{ inputs.pixi_env }}-${{ github.sha }} \
pytest openfold3/tests -vvv -n auto --cov=openfold3 --cov-report=xml --cov-report=term

- name: Debug - List files and find coverage
if: always()
run: |
echo "=== Current directory ==="
pwd
echo "=== Files in workspace root ==="
ls -la ${{ github.workspace }}
echo "=== Looking for coverage files ==="
find ${{ github.workspace }} -name "coverage.xml" -o -name ".coverage" 2>/dev/null || echo "No coverage files found"

- name: Upload coverage report
uses: actions/upload-artifact@v7
if: always()
with:
name: coverage-report-pixi-${{ inputs.pixi_env }}
path: |
coverage.xml
.coverage
include-hidden-files: true
retention-days: 30

stop-aws-runner:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
needs:
- start-aws-runner
- test-openfold-docker-pixi
if: ${{ always() }}
steps:
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v6
with:
role-to-assume: arn:aws:iam::203627415330:role/of-gha-runner
aws-region: us-east-1
- name: Stop instances
uses: omsf/stop-aws-gha-runner@v1.0.0
with:
instance_mapping: ${{ needs.start-aws-runner.outputs.mapping }}
env:
GH_PAT: ${{ secrets.GH_PAT }}
32 changes: 29 additions & 3 deletions .github/workflows/ci-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ on:
workflow_dispatch:

jobs:
test:
test-conda:
if: |
(github.event_name == 'push') ||
(github.event_name == 'workflow_dispatch') ||
Expand All @@ -29,10 +29,36 @@ jobs:
- cuda_base_image_tag: "12.1.1-cudnn8-devel-ubuntu22.04"
build_mode: "yaml"
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}-${{ matrix.cuda_base_image_tag }}
group: ${{ github.workflow }}-conda-${{ github.head_ref || github.ref }}-${{ matrix.cuda_base_image_tag }}
cancel-in-progress: true
uses: ./.github/workflows/ci-test-reusable.yml
uses: ./.github/workflows/ci-test-conda-reusable.yml
with:
cuda_base_image_tag: ${{ matrix.cuda_base_image_tag }}
build_mode: ${{ matrix.build_mode }}
secrets: inherit

test-pixi:
if: |
(github.event_name == 'push') ||
(github.event_name == 'workflow_dispatch') ||
(github.event_name == 'pull_request_target' &&
(github.repository == 'aqlaboratory/openfold-3' &&
github.event.action == 'labeled' &&
github.event.label.name == 'safe-to-test') ||
(github.repository != 'aqlaboratory/openfold-3'))
permissions:
id-token: write
contents: read
packages: write
strategy:
matrix:
include:
- pixi_env: "openfold3-cuda12"
- pixi_env: "openfold3-cuda13"
concurrency:
group: ${{ github.workflow }}-pixi-${{ github.head_ref || github.ref }}-${{ matrix.pixi_env }}
cancel-in-progress: true
uses: ./.github/workflows/ci-test-pixi-reusable.yml
with:
pixi_env: ${{ matrix.pixi_env }}
secrets: inherit
Loading
Loading