90 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
| name: update-inputs
 | |
| 
 | |
| on:
 | |
|   schedule:
 | |
|     - cron: "0 6 * * 2,5" # Tue & Fri
 | |
|   workflow_dispatch:
 | |
| 
 | |
| jobs:
 | |
|   update-flake-lock:
 | |
|     runs-on: nixos
 | |
| 
 | |
|     env:
 | |
|       BASE_BRANCH: main
 | |
|       BRANCH_PREFIX: flake-lock-update
 | |
|       FJ_URL: https://code.oliverdavies.uk
 | |
|       GIT_AUTHOR_EMAIL: flake-bot@local
 | |
|       GIT_AUTHOR_NAME: flake-bot
 | |
|       GIT_COMMITTER_EMAIL: ${{ env.GIT_AUTHOR_EMAIL }}
 | |
|       GIT_COMMITTER_NAME: ${{ env.GIT_AUTHOR_NAME }}
 | |
| 
 | |
|     steps:
 | |
|       - uses: actions/checkout@v3
 | |
|         with: { fetch-depth: 0 }
 | |
| 
 | |
|       - name: Update inputs & commit
 | |
|         id: bump
 | |
|         run: |
 | |
|           set -o errexit
 | |
|           set -o nounset
 | |
|           set -o pipefail
 | |
| 
 | |
|           BRANCH="${BRANCH_PREFIX}-${GITHUB_RUN_ID}"
 | |
|           git switch -c "$BRANCH"
 | |
| 
 | |
|           BEFORE=$(git rev-parse HEAD)
 | |
| 
 | |
|           # Nix updates inputs and commits if needed
 | |
|           nix flake update --commit-lock-file
 | |
| 
 | |
|           AFTER=$(git rev-parse HEAD)
 | |
|           if [ "$BEFORE" = "$AFTER" ]; then
 | |
|             echo "changed=false" >> "$GITHUB_OUTPUT"
 | |
|             exit 0
 | |
|           fi
 | |
| 
 | |
|           # ── Grab commit info ────────────────────────────────────────────────
 | |
|           # Full message
 | |
|           COMMIT_RAW=$(git log -1 --pretty=%B)
 | |
| 
 | |
|           # First line is the short summary; we keep lines AFTER the first blank
 | |
|           COMMIT_BODY=$(printf '%s\n' "$COMMIT_RAW" \
 | |
|             | sed '1,/^$/d' \
 | |
|             | sed 's/^• */* /') # nicer Markdown bullet
 | |
| 
 | |
|           # Title becomes first line of the PR
 | |
|           COMMIT_TITLE=$(printf '%s\n' "$COMMIT_RAW" | head -n1)
 | |
| 
 | |
|           # JSON-escape the body so \n etc. are valid JSON
 | |
|           BODY_JSON=$(printf '%s' "$COMMIT_BODY" | jq -Rs .)
 | |
| 
 | |
|           echo "changed=true" >> "$GITHUB_OUTPUT"
 | |
|           echo "branch=$BRANCH" >> "$GITHUB_OUTPUT"
 | |
|           echo "title=$COMMIT_TITLE" >> "$GITHUB_OUTPUT"
 | |
|           echo "body_json=$BODY_JSON" >> "$GITHUB_OUTPUT"
 | |
| 
 | |
|           git push -u origin "$BRANCH"
 | |
| 
 | |
|       - name: Open pull-request
 | |
|         if: steps.bump.outputs.changed == 'true'
 | |
|         env:
 | |
|           TOKEN: ${{ secrets.FLAKE_UPDATE_PAT }}
 | |
|           BRANCH: ${{ steps.bump.outputs.branch }}
 | |
|           TITLE: ${{ steps.bump.outputs.title }}
 | |
|           BODY_JSON: ${{ steps.bump.outputs.body_json }}
 | |
|         run: |
 | |
|           set -o errexit
 | |
|           set -o nounset
 | |
| 
 | |
|           OWNER="${GITHUB_REPOSITORY%%/*}"
 | |
|           REPO="${GITHUB_REPOSITORY#*/}"
 | |
| 
 | |
|           curl -fSs -X POST "$FJ_URL/api/v1/repos/$OWNER/$REPO/pulls" \
 | |
|             -H "Authorization: token $TOKEN" \
 | |
|             --json '{
 | |
|               "base": "'"$BASE_BRANCH"'",
 | |
|               "body": '"$BODY_JSON"',
 | |
|               "draft": false,
 | |
|               "head": "'"$BRANCH"'",
 | |
|               "title": "'"$TITLE"'"
 | |
|             }'
 |