Merge pull request #595 from Marcono1234/improve-workflows

Improve GitHub workflows
This commit is contained in:
Martijn Verburg 2024-03-08 15:55:40 +13:00 коммит произвёл GitHub
Родитель 3ff85ba0fd 6df9e2f401
Коммит 8bbfd21bae
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
4 изменённых файлов: 38 добавлений и 30 удалений

6
.github/dependabot.yml поставляемый Normal file
Просмотреть файл

@ -0,0 +1,6 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"

Просмотреть файл

@ -4,12 +4,15 @@ on:
issues:
types: [opened]
permissions:
issues: write
jobs:
format-crash-report:
runs-on: ubuntu-latest
steps:
- name: Format crash report
uses: actions/github-script@v6
uses: actions/github-script@v7
with:
script: |
const issueNumber = context.issue.number
@ -23,7 +26,7 @@ jobs:
// Check if issue contains code block
if (issueBody.includes('```')) {
console.log('Issue body seems to contain code block; skipping formatting')
core.info('Issue body seems to contain code block; skipping formatting')
return
}
@ -32,9 +35,9 @@ jobs:
const newIssueBody = issueBody.replace(crashReportPattern, '\n```\n$&\n```\n')
if (newIssueBody === issueBody) {
console.log('Did not find crash report in issue body')
core.info('Did not find crash report in issue body')
} else {
console.log('Found crash report in issue body, formatting it')
core.notice('Found crash report in issue body, formatting it')
github.rest.issues.update({
owner: owner,
repo: repo,

Просмотреть файл

@ -3,6 +3,9 @@ on:
issue_comment:
types: [created, edited]
permissions:
issues: write
jobs:
check-reported-upstream:
runs-on: ubuntu-latest
@ -11,7 +14,7 @@ jobs:
# Ignore pull request comments, see
# https://docs.github.com/en/actions/learn-github-actions/events-that-trigger-workflows#issue_comment
if: ${{ !github.event.issue.pull_request }}
uses: actions/github-script@v6
uses: actions/github-script@v7
with:
script: |
// See documentation for payload properties
@ -21,7 +24,7 @@ jobs:
const sender = context.payload.sender.login
if (issue.user.login !== sender) {
console.log('Ignoring comment by user other than author')
core.info('Ignoring comment by user other than author')
return
}
@ -29,11 +32,11 @@ jobs:
const issueLabels = issue.labels.map(label => label.name)
if (issueLabels.includes(reportedUpstreamLabel)) {
console.log('Ignoring issue because it already has upstream label')
core.info('Ignoring issue because it already has upstream label')
return
}
if (!issueLabels.includes('Minecraft')) {
console.log('Ignoring issue because it is not labeled as Minecraft')
core.info('Ignoring issue because it is not labeled as Minecraft')
return
}
@ -44,10 +47,10 @@ jobs:
const matchedMojiraIssueKey = /(?<!\w)MC-\d{6,}(?!\w)(?<!MC-123456)/i.exec(commentBody)
if (matchedMojiraIssueKey === null) {
console.log('Did not find Mojira issue key in comment')
core.info('Did not find Mojira issue key in comment')
}
else {
console.log(`Found Mojira issue key ${matchedMojiraIssueKey[0]}, adding label`)
core.notice(`Found Mojira issue key ${matchedMojiraIssueKey[0]}, adding label`)
const owner = context.repo.owner
const repo = context.repo.repo

36
.github/workflows/minecraft-crash.yml поставляемый
Просмотреть файл

@ -3,16 +3,15 @@ on:
issues:
types: [opened]
permissions:
issues: write
jobs:
check-minecraft-crash:
runs-on: ubuntu-latest
steps:
- uses: actions/setup-node@v3
with:
node-version: 16
- run: npm install axios
- name: Check Minecraft crash
uses: actions/github-script@v6
uses: actions/github-script@v7
with:
script: |
// Strings which indicate that Minecraft is modded
@ -27,16 +26,12 @@ jobs:
'--fml.forgeVersion',
]
const axios = require('axios')
async function httpGet(url) {
const result = await axios.get(url, {
responseType: 'text'
})
const status = result.status
const data = result.data
const response = await fetch(url)
const status = response.status
const data = await response.text()
if (status < 200 || status >= 300) {
throw new Error(`GET request to ${url} failed with ${status} '${result.statusText}': ${data}`)
throw new Error(`GET request to ${url} failed with ${status} '${response.statusText}': ${data}`)
}
return data
}
@ -58,26 +53,26 @@ jobs:
const foundModdedStrings = moddedStrings.filter(s => issueBody.includes(s))
if (foundModdedStrings.length === 0) {
console.log('Did not find modded string in issue body, searching attachments')
core.info('Did not find modded string in issue body, searching attachments')
// Try searching in attachments
// There is currently no API so try to find URL then get attachment content, see https://github.community/t/get-files-attached-in-issue/117443
const attachmentPattern = new RegExp(`https://github\\.com/${owner}/${repo}/files/\\d+/[a-zA-Z0-9_\\-.]+`, 'g')
const attachmentUrls = Array.from(issueBody.matchAll(attachmentPattern), m => m[0])
console.log('Found attachment URLs', attachmentUrls)
core.info(`Found attachment URLs: ${attachmentUrls}`)
for (const url of attachmentUrls) {
let attachment = undefined
try {
attachment = await httpGet(url)
} catch (e) {
// Only log message because complete error is rather verbose
console.log('Failed getting attachment for ' + url, e.message)
core.warning(`Failed getting attachment for ${url}: ${e.message}`)
continue
}
if (!isMinecraftIssue) {
isMinecraftIssue = minecraftRegex.test(attachment)
if (isMinecraftIssue) {
console.log('Found Minecraft string in attachment')
core.info('Found Minecraft string in attachment')
}
}
@ -92,14 +87,15 @@ jobs:
let isCrashFromModdedMinecraft = foundModdedStrings.length > 0
if (isCrashFromModdedMinecraft) {
console.log('Found modded strings', foundModdedStrings)
core.notice(`Found modded strings: ${foundModdedStrings}`)
} else {
console.log('Did not find modded strings')
core.info('Did not find modded strings')
}
isMinecraftIssue = isMinecraftIssue || isCrashFromModdedMinecraft
console.log('Is Minecraft issue: ' + isMinecraftIssue)
if (isMinecraftIssue) {
core.notice('Detected issue to be about Minecraft')
let commentBody
if (isCrashFromModdedMinecraft) {
// Don't tell user to report modded crashes on Mojang's bug tracker; they will most likely be considered Invalid