From c6b1400ef04b0506ee14be0490ace9be73329a88 Mon Sep 17 00:00:00 2001 From: Frank Wang Date: Tue, 14 Apr 2026 15:41:36 -0700 Subject: [PATCH 1/8] Convert CircleCI to GitHub Actions Migrate CI pipeline from .circleci/config.yml to .github/workflows/ci.yml with pinned action SHAs and pinned runner version (ubuntu-24.04). --- .github/workflows/ci.yml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..a882542 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,30 @@ +name: CI + +on: + push: + pull_request: + +permissions: + contents: read + +jobs: + build-and-test: + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 + + - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 + with: + python-version: "3.9" + cache: pip + + - name: Install dependencies + run: pip install -r requirements.txt + + - name: Check formatting + run: | + pip install yapf + yapf -d -r -e '.cci_pycache/**' . + + - name: Run tests + run: pytest From 76055b7ae6911f48ac6fa68e6df0f546b8bbcd10 Mon Sep 17 00:00:00 2001 From: Frank Wang Date: Tue, 14 Apr 2026 15:48:32 -0700 Subject: [PATCH 2/8] Remove CircleCI config CI is now handled by GitHub Actions. --- .circleci/config.yml | 50 -------------------------------------------- 1 file changed, 50 deletions(-) delete mode 100644 .circleci/config.yml diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 5fc6aee..0000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,50 +0,0 @@ -# Use the latest 2.1 version of CircleCI pipeline process engine. -# See: https://circleci.com/docs/configuration-reference - -# For a detailed guide to building and testing with Python, read the docs: -# https://circleci.com/docs/language-python/ for more details -version: 2.1 - -# Orbs are reusable packages of CircleCI configuration that you may share across projects, enabling you to create encapsulated, parameterized commands, jobs, and executors that can be used across multiple projects. -# See: https://circleci.com/docs/orb-intro/ -orbs: - # See the Python orb documentation here: https://circleci.com/developer/orbs/orb/circleci/python - python: circleci/python@3.3.0 - -# Define a job to be invoked later in a workflow. -# See: https://circleci.com/docs/jobs-steps/#jobs-overview & https://circleci.com/docs/configuration-reference/#jobs -jobs: - build-and-test: - # Specify the execution environment. You can specify an image from Docker Hub or use one of our convenience images from CircleCI's Developer Hub. - # See: https://circleci.com/docs/executor-intro/ & https://circleci.com/docs/configuration-reference/#executor-job - docker: - # Specify the version you desire here - # See:https://circleci.com/developer/images/image/cimg/python - - image: cimg/python:3.9 - - # Add steps to the job - # See: https://circleci.com/docs/jobs-steps/#steps-overview & https://circleci.com/docs/configuration-reference/#steps - steps: - # Checkout the code as the first step. - - checkout - - python/install-packages: - pkg-manager: pip - # app-dir: ~/project/package-directory/ # If your requirements.txt isn't in the root directory. - # pip-dependency-file: test-requirements.txt # if you have a different name for your requirements file, maybe one that combines your runtime and test requirements. - - run: - name: Check formatting - command: | - pip install yapf - yapf -d -r -e '.cci_pycache/**' . - - run: - name: Run tests - # This assumes pytest is installed via the install-package step above - command: pytest - -# Orchestrate jobs using workflows -# See: https://circleci.com/docs/workflows/ & https://circleci.com/docs/configuration-reference/#workflows -workflows: - sample: # This is the name of the workflow, feel free to change it to better match your workflow. - # Inside the workflow, you define the jobs you want to run. - jobs: - - build-and-test From 18f829152e463c9d856f537845252623e731223c Mon Sep 17 00:00:00 2001 From: Frank Wang Date: Tue, 14 Apr 2026 17:25:32 -0700 Subject: [PATCH 3/8] Trigger CI From 4012cec9e5c6c2c16f481b29d2fce3a254f15710 Mon Sep 17 00:00:00 2001 From: Frank Wang Date: Tue, 14 Apr 2026 17:40:54 -0700 Subject: [PATCH 4/8] Trigger CI From 463141b1ce116176fdcd33b904e72db8b57973aa Mon Sep 17 00:00:00 2001 From: Frank Wang Date: Tue, 14 Apr 2026 17:46:26 -0700 Subject: [PATCH 5/8] Use shorthand syntax for CI triggers --- .github/workflows/ci.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a882542..5a8c305 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,8 +1,6 @@ name: CI -on: - push: - pull_request: +on: [push, pull_request] permissions: contents: read From f8e299ca8966c353c43fe20a65f8ba7a5f785f15 Mon Sep 17 00:00:00 2001 From: Frank Wang Date: Tue, 14 Apr 2026 17:46:52 -0700 Subject: [PATCH 6/8] Add concurrency group to deduplicate CI runs --- .github/workflows/ci.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5a8c305..6c3885d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,6 +2,10 @@ name: CI on: [push, pull_request] +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + permissions: contents: read From 8294b39353fe8f509fad7cc2038af79016c2af3a Mon Sep 17 00:00:00 2001 From: Frank Wang Date: Tue, 14 Apr 2026 17:48:12 -0700 Subject: [PATCH 7/8] Only trigger CI on pull requests --- .github/workflows/ci.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6c3885d..d480d51 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,10 +1,6 @@ name: CI -on: [push, pull_request] - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true +on: [pull_request] permissions: contents: read From ed2cd867c6ab975b4eae03cc350d2bffb8e8b385 Mon Sep 17 00:00:00 2001 From: Frank Wang Date: Tue, 14 Apr 2026 18:38:30 -0700 Subject: [PATCH 8/8] Upgrade dependencies and bump minimum Python to 3.10 Python 3.9 reached EOL on 2025-10-31. Bump minimum to 3.10 in setup.py and README. Upgrade 7 dependencies to latest, pin setuptools (CVE-2025-47273) and yapf in CI for reproducibility.