91 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
		
		
			
		
	
	
			91 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"'"
							 | 
						||
| 
								 | 
							
								            }'
							 |