From 9a31122c826a79dabc6800ec931d54364e725fff Mon Sep 17 00:00:00 2001 From: t895 Date: Tue, 2 Jan 2024 23:48:57 -0500 Subject: [PATCH 1/3] actions: android: Move trigger logic to be yuzu-android specific --- .github/workflows/android-merge.js | 43 ++++++++++++++++++++------- .github/workflows/android-publish.yml | 4 +-- 2 files changed, 35 insertions(+), 12 deletions(-) diff --git a/.github/workflows/android-merge.js b/.github/workflows/android-merge.js index 7e02dc9e5b..79446c76a3 100644 --- a/.github/workflows/android-merge.js +++ b/.github/workflows/android-merge.js @@ -10,7 +10,7 @@ const CHANGE_LABEL = 'android-merge'; // how far back in time should we consider the changes are "recent"? (default: 24 hours) const DETECTION_TIME_FRAME = (parseInt(process.env.DETECTION_TIME_FRAME)) || (24 * 3600 * 1000); -async function checkBaseChanges(github, context) { +async function checkBaseChanges(github) { // query the commit date of the latest commit on this branch const query = `query($owner:String!, $name:String!, $ref:String!) { repository(name:$name, owner:$owner) { @@ -22,8 +22,8 @@ async function checkBaseChanges(github, context) { } }`; const variables = { - owner: context.repo.owner, - name: context.repo.repo, + owner: 'yuzu-emu', + name: 'yuzu', ref: 'refs/heads/master', }; const result = await github.graphql(query, variables); @@ -38,8 +38,8 @@ async function checkBaseChanges(github, context) { return false; } -async function checkAndroidChanges(github, context) { - if (checkBaseChanges(github, context)) return true; +async function checkAndroidChanges(github) { + if (checkBaseChanges(github)) return true; const query = `query($owner:String!, $name:String!, $label:String!) { repository(name:$name, owner:$owner) { pullRequests(labels: [$label], states: OPEN, first: 100) { @@ -48,8 +48,8 @@ async function checkAndroidChanges(github, context) { } }`; const variables = { - owner: context.repo.owner, - name: context.repo.repo, + owner: 'yuzu-emu', + name: 'yuzu', label: CHANGE_LABEL, }; const result = await github.graphql(query, variables); @@ -182,7 +182,30 @@ async function mergePullRequests(pulls, execa) { return mergeResults; } +async function resetBranch(execa) { + console.log("::group::Reset master branch"); + let hasFailed = false; + try { + await execa("git", ["remote", "add", "source", "https://github.com/yuzu-emu/yuzu.git"]); + await execa("git", ["fetch", "source"]); + const process1 = await execa("git", ["rev-parse", "source/master"]); + const headCommit = process1.stdout; + + await execa("git", ["reset", "--hard", headCommit]); + } catch (err) { + console.log(`::error title=Failed to reset master branch`); + hasFailed = true; + } + console.log("::endgroup::"); + if (hasFailed) { + throw 'Failed to reset the master branch. Aborting!'; + } +} + async function mergebot(github, context, execa) { + // Reset our local copy of master to what appears on yuzu-emu/yuzu - master + await resetBranch(execa); + const query = `query ($owner:String!, $name:String!, $label:String!) { repository(name:$name, owner:$owner) { pullRequests(labels: [$label], states: OPEN, first: 100) { @@ -193,8 +216,8 @@ async function mergebot(github, context, execa) { } }`; const variables = { - owner: context.repo.owner, - name: context.repo.repo, + owner: 'yuzu-emu', + name: 'yuzu', label: CHANGE_LABEL, }; const result = await github.graphql(query, variables); @@ -209,7 +232,7 @@ async function mergebot(github, context, execa) { await fetchPullRequests(pulls, "https://github.com/yuzu-emu/yuzu", execa); const mergeResults = await mergePullRequests(pulls, execa); await generateReadme(pulls, context, mergeResults, execa); - await tagAndPush(github, context.repo.owner, `${context.repo.repo}-android`, execa, true); + await tagAndPush(github, 'yuzu-emu', `yuzu-android`, execa, true); } module.exports.mergebot = mergebot; diff --git a/.github/workflows/android-publish.yml b/.github/workflows/android-publish.yml index 8f46fcf748..68e21c2f22 100644 --- a/.github/workflows/android-publish.yml +++ b/.github/workflows/android-publish.yml @@ -16,7 +16,7 @@ on: jobs: android: runs-on: ubuntu-latest - if: ${{ github.event.inputs.android != 'false' && github.repository == 'yuzu-emu/yuzu' }} + if: ${{ github.event.inputs.android != 'false' && github.repository == 'yuzu-emu/yuzu-android' }} steps: # this checkout is required to make sure the GitHub Actions scripts are available - uses: actions/checkout@v3 @@ -33,7 +33,7 @@ jobs: script: | if (context.payload.inputs && context.payload.inputs.android === 'true') return true; const checkAndroidChanges = require('./.github/workflows/android-merge.js').checkAndroidChanges; - return checkAndroidChanges(github, context); + return checkAndroidChanges(github); - run: npm install execa@5 if: ${{ steps.check-changes.outputs.result == 'true' }} - uses: actions/checkout@v3 From 06c68fb196323dd6a72f3a93dc76a4ed294d7451 Mon Sep 17 00:00:00 2001 From: t895 Date: Wed, 3 Jan 2024 17:00:49 -0500 Subject: [PATCH 2/3] actions: android: Resolve PR commits to link --- .github/workflows/android-merge.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/android-merge.js b/.github/workflows/android-merge.js index 79446c76a3..0e1e5f1a13 100644 --- a/.github/workflows/android-merge.js +++ b/.github/workflows/android-merge.js @@ -157,7 +157,7 @@ async function mergePullRequests(pulls, execa) { process1.stdout.pipe(process.stdout); await process1; - const process2 = execa("git", ["commit", "-m", `Merge PR ${pr}`]); + const process2 = execa("git", ["commit", "-m", `Merge yuzu-emu#${pr}`]); process2.stdout.pipe(process.stdout); await process2; From 3b314a68a1b6cf5e7e6697d2efc0c0baa2c21755 Mon Sep 17 00:00:00 2001 From: t895 Date: Wed, 3 Jan 2024 17:01:31 -0500 Subject: [PATCH 3/3] actions: android: Prevent resolving tag commit to PR link --- .github/workflows/android-merge.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/android-merge.js b/.github/workflows/android-merge.js index 0e1e5f1a13..44ab56e445 100644 --- a/.github/workflows/android-merge.js +++ b/.github/workflows/android-merge.js @@ -90,8 +90,8 @@ async function tagAndPush(github, owner, repo, execa, commit=false) { console.log(`New tag: ${newTag}`); if (commit) { let channelName = channel[0].toUpperCase() + channel.slice(1); - console.info(`Committing pending commit as ${channelName} #${tagNumber + 1}`); - await execa("git", ['commit', '-m', `${channelName} #${tagNumber + 1}`]); + console.info(`Committing pending commit as ${channelName} ${tagNumber + 1}`); + await execa("git", ['commit', '-m', `${channelName} ${tagNumber + 1}`]); } console.info('Pushing tags to GitHub ...'); await execa("git", ['tag', newTag]);