name: PR to update CPE dictionary index
on:
  schedule:
    - cron: "0 1 * * 1" # every monday at 1 AM

  workflow_dispatch:

permissions:
  contents: read

env:
  SLACK_NOTIFICATIONS: true

jobs:
  upgrade-cpe-dictionary-index:
    runs-on: ubuntu-latest
    if: github.repository == 'anchore/syft' # only run for main repo
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2.2

      - name: Bootstrap environment
        uses: ./.github/actions/bootstrap

      - name: Bootstrap environment
        uses: ./.github/actions/bootstrap

      - run: |
          make generate-cpe-dictionary-index

      - uses: tibdex/github-app-token@3beb63f4bd073e61482598c45c71c1019b59b73a #v2.1.0
        id: generate-token
        with:
          app_id: ${{ secrets.TOKEN_APP_ID }}
          private_key: ${{ secrets.TOKEN_APP_PRIVATE_KEY }}

      - uses: peter-evans/create-pull-request@67ccf781d68cd99b580ae25a5c18a1cc84ffff1f #v7.0.6
        with:
          signoff: true
          delete-branch: true
          branch: auto/latest-cpe-dictionary-index
          labels: dependencies
          commit-message: "chore(deps): update CPE dictionary index"
          title: "chore(deps): update CPE dictionary index"
          body: |
            Update CPE dictionary index based on the latest available CPE dictionary
          token: ${{ steps.generate-token.outputs.token }}

      - uses: 8398a7/action-slack@28ba43ae48961b90635b50953d216767a6bea486 #v3.16.2
        with:
          status: ${{ job.status }}
          fields: workflow,eventName,job
          text: Syft CPE dictionary index update failed
        env:
          SLACK_WEBHOOK_URL: ${{ secrets.SLACK_TOOLBOX_WEBHOOK_URL }}
        if: ${{ failure() && env.SLACK_NOTIFICATIONS == 'true' }}
