-
Notifications
You must be signed in to change notification settings - Fork 75
95 lines (82 loc) · 3.24 KB
/
nightly-builds.yml
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
93
94
95
name: Nightly Checks
on:
schedule:
# Runs at 09Z (3am MDT)
- cron: "0 9 * * 2"
# Allow a manual run
workflow_dispatch:
# Run if we modify the workflow
push:
branches:
- main
paths:
- .github/workflows/nightly-builds.yml
- .github/workflows/unstable-builds.yml
pull_request:
paths:
- .github/workflows/nightly-builds.yml
- .github/workflows/unstable-builds.yml
jobs:
Builds:
uses: ./.github/workflows/unstable-builds.yml
Report:
name: Report
needs: Builds
if: failure() || github.event_name == 'pull_request'
runs-on: ubuntu-latest
permissions:
issues: write
steps:
- name: Download logs
uses: actions/download-artifact@v4
with:
path: /tmp/workspace/logs
- name: Grab log files
run: |
cp /tmp/workspace/logs/log-*/*.log . || true
touch tests-nightly.log build.log linkchecker.log
- name: Report failures
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const title = "Nightly build is failing";
const workflow_url = `https://github.com/${process.env.GITHUB_REPOSITORY}/actions/runs/${process.env.GITHUB_RUN_ID}`;
body = `The [Nightly workflow](${workflow_url}) is failing.\n`;
if ('${{ needs.Builds.outputs.tests_result }}' === 'failure') {
const test_log = fs.readFileSync('tests-nightly.log', 'utf8').substring(0, 21000);
body += `The tests failed.\nLog:\n<details><pre>${test_log}</pre></details>`;
}
if ('${{ needs.Builds.outputs.docs_result }}' === 'failure') {
const build_log = fs.readFileSync('build.log', 'utf8').substring(0, 21000);
const linkchecker = fs.readFileSync('linkchecker.log', 'utf8').substring(0, 21000);
body += `The documentation build failed.\nLog:\n<details><pre>${build_log}</pre></details>`;
body += `\nLinkchecker output:\n<details><pre>${linkchecker}</pre></details>`;
}
// See if we have an existing issue
const items = await github.rest.issues.listForRepo({
owner: context.repo.owner,
repo: context.repo.repo,
state: 'open',
creator: 'github-actions[bot]'
});
const existing = items.data.filter(i => i.title === title);
params = {
owner: context.repo.owner,
repo: context.repo.repo,
body: body,
title: title,
labels: ['Type: Maintenance']
};
// On PRs, avoid actually issuing an API request, since we don't have permission
if ( context.eventName === 'pull_request' ) {
github.hook.wrap('request', (request, options) => { return {}; })
}
if (existing.length === 0) {
console.log('Creating new issue.')
github.rest.issues.create(params)
} else {
params.issue_number = existing[0].number;
console.log(`Updating existing issue: ${params.issue_number}`)
github.rest.issues.update(params)
}