aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/check_cirrus_cron.yml
blob: be77508523d2cfdf3605ac2ee86445d3766078b2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
---

# Format Ref: https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions

# Required to un-FUBAR default ${{github.workflow}} value
name: check_cirrus_cron

on:
    # Note: This only applies to the main branch.
    schedule:
        # N/B: This should correspond to a period slightly after
        # the last job finishes running.  See job defs. at:
        # https://cirrus-ci.com/settings/repository/6707778565701632
        - cron:  '59 23 * * 1-5'
    # Debug: Allow triggering job manually in github-actions WebUI
    workflow_dispatch: {}

env:
    # Debug-mode can reveal secrets, only enable by a secret value.
    # Ref: https://help.github.com/en/actions/configuring-and-managing-workflows/managing-a-workflow-run#enabling-step-debug-logging
    ACTIONS_STEP_DEBUG: '${{ secrets.ACTIONS_STEP_DEBUG }}'
    # CSV listing of e-mail addresses for delivery failure or error notices
    RCPTCSV: rh.container.bot@gmail.com,podman-monitor@lists.podman.io
    # Filename for table of cron-name to build-id data
    # (must be in $GITHUB_WORKSPACE/artifacts/)
    NAME_ID_FILEPATH: './artifacts/name_id.txt'

jobs:
    cron_failures:
        runs-on: ubuntu-latest
        steps:
            - uses: actions/checkout@v2
              with:
                  persist-credentials: false

            - name: Get failed cron names and Build IDs
              id: cron
              run: './.github/actions/${{ github.workflow }}/${{ github.job }}.sh'

            - if: steps.cron.outputs.failures > 0
              shell: bash
              # Must be inline, since context expressions are used.
              # Ref: https://docs.github.com/en/free-pro-team@latest/actions/reference/context-and-expression-syntax-for-github-actions
              run: |
                set -eo pipefail
                (
                echo "Detected one or more Cirrus-CI cron-triggered jobs have failed recently:"
                echo ""

                while read -r NAME BID; do
                    echo "Cron build '$NAME' Failed: https://cirrus-ci.com/build/$BID"
                done < "$NAME_ID_FILEPATH"

                echo ""
                echo "# Source: ${{ github.workflow }} workflow on ${{ github.repository }}."
                # Separate content from sendgrid.com automatic footer.
                echo ""
                echo ""
                ) > ./artifacts/email_body.txt

            - if: steps.cron.outputs.failures > 0
              name: Send failure notification e-mail
              # Ref: https://github.com/dawidd6/action-send-mail
              uses: dawidd6/action-send-mail@v2.2.2
              with:
                server_address: ${{secrets.ACTION_MAIL_SERVER}}
                server_port: 465
                username: ${{secrets.ACTION_MAIL_USERNAME}}
                password: ${{secrets.ACTION_MAIL_PASSWORD}}
                subject: Cirrus-CI cron build failures on ${{github.repository}}
                to: ${{env.RCPTCSV}}
                from: ${{secrets.ACTION_MAIL_SENDER}}
                body: file://./artifacts/email_body.txt

            - if: always()
              uses: actions/upload-artifact@v2
              with:
                  name: ${{ github.job }}_artifacts
                  path: artifacts/*

            - if: failure()
              name: Send error notification e-mail
              uses: dawidd6/action-send-mail@v2.2.2
              with:
                server_address: ${{secrets.ACTION_MAIL_SERVER}}
                server_port: 465
                username: ${{secrets.ACTION_MAIL_USERNAME}}
                password: ${{secrets.ACTION_MAIL_PASSWORD}}
                subject: Github workflow error on ${{github.repository}}
                to: ${{env.RCPTCSV}}
                from: ${{secrets.ACTION_MAIL_SENDER}}
                body: Job failed: https://github.com/${{github.repository}}/runs/${{github.job}}?check_suite_focus=true