flake-update-action/action.yml
2025-07-15 01:24:29 +10:00

103 lines
3.2 KiB
YAML

---
name: 'Flake Input Updater'
inputs:
base:
default: 'main'
required: false
name:
default: 'flake bump bot'
required: false
email:
default: 'bot@nix.flake'
required: false
title:
default: '[bot]: flake bump'
required: false
post-workflow:
default: ''
required: false
runs:
using: "composite"
steps:
- name: "Configure git"
shell: bash
run: |
echo "Configuring git"
git config user.name "${{ inputs.name }}" >> $GITHUB_OUTPUT
git config user.email "${{ inputs.email }}" >> $GITHUB_OUTPUT
- name: "Create branch"
id: clone
shell: bash
run: |
BRANCH="flake-update-$(date +%s)"
echo "Creating branch $BRANCH"
# git fetch --all
git checkout -b "$BRANCH"
echo branch=$BRANCH >> $GITHUB_OUTPUT
- name: "Check for updates"
id: changes
shell: bash
run: |
echo "Checking for flake updates"
cp flake.lock test.lock
nix flake update --output-lock-file test.lock
if ! (diff -q flake.lock test.lock); then
echo change=true >> $GITHUB_OUTPUT
else
echo change=false >> $GITHUB_OUTPUT
fi
- name: "Push + create PR"
shell: bash
id: push
if: steps.changes.outputs.change == 'true'
run: |
echo "Creating PR for branch ${{ steps.clone.outputs.branch }}"
mv test.lock flake.lock
git add flake.lock
git commit -m "${{ inputs.title }}"
git push --force-with-lease origin "${{ steps.clone.outputs.branch }}"
RESPONSE=$(curl -X 'POST' \
"$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/pulls" \
-H 'accept: application/json' \
-H "Authorization: token $GITHUB_TOKEN" \
-H 'Content-type: application/json' \
-d '{
"base": "${{ inputs.base }}",
"head": "${{ steps.clone.outputs.branch }}",
"title": "automated flake update"
}')
NUMBER=$(echo $RESPONSE | jq -r '.number')
echo "Created PR $NUMBER."
echo NUMBER=$NUMBER >> $GITHUB_OUTPUT
- name: "Set automerge on PR and run workflow"
shell: bash
if: steps.changes.outputs.change == 'true' && steps.push.outputs.number != 'null'
run: |
RESPONSE=$(curl -X 'POST' \
"$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/pulls/${{ steps.push.outputs.number }}/merge" \
-H 'accept: application/json' \
-H "Authorization: token $GITHUB_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"Do": "merge",
"merge_when_checks_succeed": true,
"delete_branch_after_merge": true
}')
echo $RESPONSE
- name: "Execute workflow on PR"
shell: bash
if: inputs.post-workflow != ''
run: |
curl -X 'POST' \
"$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/actions/workflows/${{ inputs.post-workflow }}/dispatches" \
-H 'accept: application/json' \
-H "Authorization: token $GITHUB_TOKEN" \
-H 'Content-Type: application/json' \
-d "{
\"ref\": \"$(git rev-parse --verify HEAD)\"
}"