Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
92 changes: 92 additions & 0 deletions .github/workflows/pre_commit_update_workflow.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
name: Pre-commit auto-update

on:
schedule:
# Cron syntax:
# 1. Entry: Minute when the process will be started [0-59]
# 2. Entry: Hour when the process will be started [0-23]
# 3. Entry: Day of the month when the process will be started [1-28/29/30/31]
# 4. Entry: Month of the year when the process will be started [1-12]
# 5. Entry: Weekday when the process will be started [0-6] [0 is Sunday]
- cron: '0 8 1 * *'
# Allow manual triggering of the workflow
workflow_dispatch:

permissions:
contents: write
pull-requests: write

env:
UP_TO_DATE: false
PYTHON_VERSION: "3.14"
REVIEWERS: "forsyth2"
jobs:
auto-update:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should probably use the latest version if we can.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be worth adding dependebot to update them.


- name: Set up Conda Environment
uses: mamba-org/setup-micromamba@v3
with:
environment-name: pre_commit_dev
init-shell: bash
condarc: |
channel_priority: strict
channels:
- conda-forge
create-args: >-
python=${{ env.PYTHON_VERSION }}

- name: Install pre-commit, pre-commit-update and gh
run: |
eval "$(micromamba shell hook --shell bash)"
micromamba activate pre_commit_dev
# permissions issue with gh 2.76.0
micromamba install -y --override-channels -c conda-forge \
pre-commit pyyaml "gh !=2.76.0"
python -m pip install pre-commit-update
gh --version

- name: Apply and commit updates
run: |
eval "$(micromamba shell hook --shell bash)"
micromamba activate pre_commit_dev
git clone https://github.com/E3SM-Project/zppy.git update-pre-commit-deps
cd update-pre-commit-deps
# Configure git using GitHub Actions credentials.
git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
git checkout -b update-pre-commit-deps
# pre-commit-update doesn't try to include non-release versions
pre-commit-update
# Propagate the new versions to conda/dev.yml and the `qa` extra in
# pyproject.toml
python scripts/sync_pre_commit_versions.py
git add .
# The second command will fail if no changes were present, so we ignore it
git commit -m "Update pre-commit dependencies" || ( echo "UP_TO_DATE=true" >> "$GITHUB_ENV")

- name: Push Changes
if: ${{ env.UP_TO_DATE == 'false' }}
uses: ad-m/github-push-action@v1.1.0
with:
branch: update-pre-commit-deps
directory: update-pre-commit-deps
github_token: ${{ secrets.GITHUB_TOKEN }}
force: true
env:
GH_TOKEN: ${{ github.token }}

- name: Make PR and add reviewers and labels
if: ${{ env.UP_TO_DATE == 'false' }}
run: |
cd update-pre-commit-deps
gh pr create \
--title "Update pre-commit and its dependencies" \
--body "This PR was auto-generated to update pre-commit and its dependencies." \
--head update-pre-commit-deps \
--reviewer ${{ env.REVIEWERS }} \
--label DevOps
env:
GH_TOKEN: ${{ github.token }}
4 changes: 3 additions & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
exclude: "docs|node_modules|migrations|.git|.tox"
fail_fast: true

# (run `python scripts/sync_pre_commit_versions.py` to sync them)
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
Expand Down Expand Up @@ -29,14 +30,15 @@ repos:
hooks:
- id: flake8
args: ["--config=.flake8.cfg"]
additional_dependencies: [flake8-isort==6.1.1]
additional_dependencies: [flake8-isort==6.1.2]

# Can run individually with `pre-commit run mypy --all-files`
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.18.2
hooks:
- id: mypy
args: ["--config=pyproject.toml"]
additional_dependencies: [types-PyYAML]

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


# https://pre-commit.ci/#configuration
ci:
Expand Down
8 changes: 7 additions & 1 deletion conda/dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,18 @@ dependencies:
- docutils>=0.16 # Removed <0.17 constraint
# Quality Assurance Tools
# =======================
# If versions are updated, also update 'rev' in `.pre-commit-config.yaml`
# Run `pre-commit autoupdate` to get the latest pinned versions of 'rev' in
# `.pre-commit-config.yaml`, then run
# `python scripts/sync_pre_commit_versions.py` to update the pinned versions
# here and in the `qa` extra of pyproject.toml.
Comment thread
forsyth2 marked this conversation as resolved.
- black ==25.1.0
- flake8 ==7.3.0
- flake8-isort ==6.1.2
- isort ==6.0.1
- mypy ==1.18.2
- pre-commit ==4.3.0
- pyyaml
- types-PyYAML >=6.0.0
Comment thread
forsyth2 marked this conversation as resolved.
- tbump >=6.9.0
# Developer Tools
# =======================
Expand Down
28 changes: 28 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,25 @@ Repository = "https://github.com/E3SM-Project/zppy.git"
[project.scripts]
zppy = "zppy.__main__:main"

# make sure these always match pinned versions in conda/dev.yml and .pre-commit-config.yaml
# (run `python scripts/sync_pre_commit_versions.py` to sync them)
[project.optional-dependencies]
qa = [
"black==25.1.0",
"flake8==7.3.0",
"flake8-isort==6.1.2",
"isort==6.0.1",
"mypy==1.18.2",
"pre-commit==4.3.0",
Comment thread
forsyth2 marked this conversation as resolved.
"pyyaml",
"types-PyYAML>=6.0.0",
]

dev = [
"tbump==6.9.0",
"ipykernel",
]

[tool.setuptools]
include-package-data = true

Expand All @@ -59,6 +78,15 @@ zppy = [
"**/*.jinja",
]

# `pre-commit-update` rewrites .pre-commit-config.yaml with ruamel.yaml. Without
# this, it defaults to `indent(sequence=4)`, which puts the `-` of each list item
# in column 0 and reformats the whole file. These settings keep its output in
# the conventional ` - item` style, so an update is a diff of just the revs.
[tool.pre-commit-update.yaml]
mapping = 2
sequence = 4
offset = 2

[tool.black]
line-length = 88
target-version = ['py311']
Expand Down
Loading
Loading