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
39 changes: 33 additions & 6 deletions .github/workflows/auto-dependabot.yaml
Original file line number Diff line number Diff line change
@@ -1,21 +1,48 @@
name: Auto-merge Dependabot PR

on:
pull_request:
# XXX: !!! SECURITY WARNING !!!
# pull_request_target has write access to the repo, and can read secrets. We
# need to audit any external actions executed in this workflow and make sure no
# checked out code is run (not even installing dependencies, as installing
# dependencies usually can execute pre/post-install scripts). We should also
# only use hashes to pick the action to execute (instead of tags or branches).
# For more details read:
# https://securitylab.github.com/research/github-actions-preventing-pwn-requests/
pull_request_target:

permissions:
contents: write
# Read repository contents and Dependabot metadata used by the nested action.
contents: read
# The nested action also uses `github.token` internally for PR operations.
pull-requests: write

jobs:
auto-merge:
if: github.actor == 'dependabot[bot]'
runs-on: ubuntu-latest
name: Auto-merge Dependabot PR
if: >
github.actor == 'dependabot[bot]' &&
!contains(github.event.pull_request.title, 'the repo-config group') &&
!contains(github.event.pull_request.title, 'Bump black from ')
runs-on: ubuntu-slim
steps:
- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2.2.1
with:
app-id: ${{ secrets.FREQUENZ_AUTO_DEPENDABOT_APP_ID }}
private-key: ${{ secrets.FREQUENZ_AUTO_DEPENDABOT_APP_PRIVATE_KEY }}
# Merge Dependabot PRs.
permission-contents: write
# Create the auto-merged label if it does not exist.
permission-issues: write
# Approve PRs, add labels, and enable auto-merge.
permission-pull-requests: write

- name: Auto-merge Dependabot PR
uses: frequenz-floss/dependabot-auto-approve@e943399cc9d76fbb6d7faae446cd57301d110165 # v1.5.0
uses: frequenz-floss/dependabot-auto-approve@e943399cc9d76fbb6d7faae446cd57301d110165 # v1.5.0
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
github-token: ${{ steps.app-token.outputs.token }}
dependency-type: 'all'
auto-merge: 'true'
merge-method: 'merge'
Expand Down
88 changes: 88 additions & 0 deletions .github/workflows/black-migration.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
# Automatic black formatting migration for Dependabot PRs
#
# When Dependabot upgrades black, this workflow installs the new version
# and runs `black .` so the PR already contains any formatting changes
# introduced by the upgrade, while leaving the PR open for review.
#
# Black uses calendar versioning. Only the first release of a new calendar
# year may introduce formatting changes (major bump in Dependabot's terms).
# Minor and patch updates within a year keep formatting stable, so they stay
# in the regular Dependabot groups and are auto-merged normally.
#
# The companion auto-dependabot workflow skips major black PRs so they're
# handled exclusively by this migration workflow.
#
# XXX: !!! SECURITY WARNING !!!
# pull_request_target has write access to the repo, and can read secrets.
# This is required because Dependabot PRs are treated as fork PRs: the
# GITHUB_TOKEN is read-only and secrets are unavailable with a plain
# pull_request trigger. The action mitigates the risk by:
# - Never executing code from the PR (the migration script is embedded
# in this workflow file on the base branch, not taken from the PR).
# - Gating migration steps on github.actor == 'dependabot[bot]'.
# - Running checkout with persist-credentials: false and isolating
# push credentials from the migration script environment.
# For more details read:
# https://securitylab.github.com/research/github-actions-preventing-pwn-requests/

name: Black Migration

on:
merge_group: # To allow using this as a required check for merging
pull_request_target:
types: [opened, synchronize, reopened, labeled, unlabeled]

permissions:
# Commit reformatted files back to the PR branch.
contents: write
# Create and normalize migration state labels.
issues: write
# Read/update pull request metadata and comments.
pull-requests: write

jobs:
black-migration:
name: Migrate Black
# Skip if it was triggered by the merge queue. We only need the workflow to
# be executed to meet the "Required check" condition for merging, but we
# don't need to actually run the job, having the job present as Skipped is
# enough.
if: |
github.event_name == 'pull_request_target' &&
github.actor == 'dependabot[bot]' &&
contains(github.event.pull_request.title, 'Bump black from ')
runs-on: ubuntu-24.04
steps:
- name: Generate token
id: create-app-token
uses: actions/create-github-app-token@f8d387b68d61c58ab83c6c016672934102569859 # v3.0.0
with:
app-id: ${{ secrets.FREQUENZ_AUTO_DEPENDABOT_APP_ID }}
private-key: ${{ secrets.FREQUENZ_AUTO_DEPENDABOT_APP_PRIVATE_KEY }}
# Push reformatted files to the PR branch.
permission-contents: write
# Create and normalize migration state labels.
permission-issues: write
# Read/update pull request metadata and labels.
permission-pull-requests: write
- name: Migrate
uses: llucax/gh-action-dependabot-migrate@90f41ef501378754ffbcd3a75bc907ac9fe1b31e # internal-script
with:
migration-script: |
import os
import subprocess
import sys

version = os.environ["MIGRATION_VERSION"].lstrip("v")
subprocess.run(
[sys.executable, "-Im", "pip", "install", f"black=={version}"],
check=True,
)
subprocess.run([sys.executable, "-Im", "black", "."], check=True)
token: ${{ steps.create-app-token.outputs.token }}
auto-merge-on-changes: "false"
sign-commits: "true"
auto-merged-label: "tool:auto-merged"
migrated-label: "tool:black:migration:executed"
intervention-pending-label: "tool:black:migration:intervention-pending"
intervention-done-label: "tool:black:migration:intervention-done"
Loading