name: Update `flake.lock`
on:
  workflow_dispatch:
  schedule:
    - cron: '0 0 * * 6' # runs weekly on Saturday at 00:00

jobs:
  update_lockfile:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
      - name: Install nix
        uses: https://github.com/DeterminateSystems/nix-installer-action@main

      - name: Update flake.lock
        id: update
        run: |
          nix flake update 2> >(tee /dev/stderr) | awk '
            /^• Updated input/ {in_update = 1; print; next}
            in_update && !/^warning:/ {print}
            /^$/ {in_update = 0}
          ' > update.log

          echo "UPDATE_LOG<<EOF" >> $GITHUB_ENV
          cat update.log >> $GITHUB_ENV 
          echo "EOF" >> $GITHUB_ENV

          rm update.log

      - name: Write PR body template
        uses: https://github.com/DamianReeves/write-file-action@v1.3
        with:
          path: pr_body.template
          contents: |
            - The following Nix Flake inputs were updated:

            ```
            ${{ env.UPDATE_LOG }}
            ```

            Auto-generated by [update.yml][1] with the help of
            [create-pull-request][2].

            [1]: https://forgejo.stefka.eu/jiriks74/nix.nvim/src/branch/main/.github/workflows/update.yml
            [2]: https://forgejo.stefka.eu/jiriks74/create-pull-request

      - name: Generate PR body
        uses: pedrolamas/handlebars-action@v2.4.0 # v2.4.0
        with:
          files: "pr_body.template"
          output-filename: "pr_body.md"
      - name: Save PR body
        id: pr_body
        uses: juliangruber/read-file-action@v1
        with:
          path: "pr_body.md"

      - name: Remove temporary files
        run: |
          rm pr_body.template
          rm pr_body.md

      - name: Create Pull Request
        id: create-pull-request
        uses: https://forgejo.stefka.eu/jiriks74/create-pull-request@7174d368c2e4450dea17b297819eb28ae93ee645
        with:
          token: ${{ secrets.FORGEJO_TOKEN_FOR_UPDATES  }}
          body: ${{ steps.pr_body.outputs.content }}
          author: '"github-actions[bot]" <github-actions[bot]@users.noreply.github.com>'
          title: 'automated: Update `flake.lock`'
          commit-message: |
            automated: Update `flake.lock`

            ${{ steps.pr_body.outputs.content }}

          branch: update-flake-lock
          delete-branch: true
      - name: Print PR number
        run: |
          echo "Pull request number is ${{ steps.create-pull-request.outputs.pull-request-number }}."
          echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}"