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"'"
 | 
						|
            }'
 |