mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	CI: make auto-publish workflow more robust and flexible ...
* workaround an issue where sometimes GHA does not pass repository object into the context variable * make detection interval adjustable
This commit is contained in:
		
							parent
							
								
									45ea8340be
								
							
						
					
					
						commit
						ad1f0eed22
					
				
					 2 changed files with 35 additions and 15 deletions
				
			
		
							
								
								
									
										25
									
								
								.github/workflows/ci-merge.js
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										25
									
								
								.github/workflows/ci-merge.js
									
										
									
									
										vendored
									
									
								
							|  | @ -2,10 +2,28 @@ | |||
| // It is not meant to be executed directly on your machine without modifications
 | ||||
| 
 | ||||
| const fs = require("fs"); | ||||
| // 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) { | ||||
|     // a special robustness handling for when GHA did not pass the repository info
 | ||||
|     if (!context.payload.repository) { | ||||
|         const result = await github.rest.repos.get({ | ||||
|             owner: context.repo.owner, | ||||
|             repo: context.repo.repo, | ||||
|         }); | ||||
|         context.payload.repository = result.data; | ||||
|     } | ||||
|     const delta = new Date() - new Date(context.payload.repository.pushed_at); | ||||
|     if (delta <= DETECTION_TIME_FRAME) { | ||||
|         console.info('New changes detected, triggering a new build.'); | ||||
|         return true; | ||||
|     } | ||||
|     return false; | ||||
| } | ||||
| 
 | ||||
| async function checkCanaryChanges(github, context) { | ||||
|     const delta = new Date() - new Date(context.payload.repository.pushed_at); | ||||
|     if (delta <= 86400000) return true; | ||||
|     if (checkBaseChanges(github, context)) return true; | ||||
|     const query = `query($owner:String!, $name:String!, $label:String!) {
 | ||||
|         repository(name:$name, owner:$owner) { | ||||
|             pullRequests(labels: [$label], states: OPEN, first: 100) { | ||||
|  | @ -22,7 +40,7 @@ async function checkCanaryChanges(github, context) { | |||
|     const pulls = result.repository.pullRequests.nodes; | ||||
|     for (let i = 0; i < pulls.length; i++) { | ||||
|         let pull = pulls[i]; | ||||
|         if (new Date() - new Date(pull.headRepository.pushedAt) <= 86400000) { | ||||
|         if (new Date() - new Date(pull.headRepository.pushedAt) <= DETECTION_TIME_FRAME) { | ||||
|             console.info(`${pull.number} updated at ${pull.headRepository.pushedAt}`); | ||||
|             return true; | ||||
|         } | ||||
|  | @ -180,3 +198,4 @@ async function mergebot(github, context, execa) { | |||
| module.exports.mergebot = mergebot; | ||||
| module.exports.checkCanaryChanges = checkCanaryChanges; | ||||
| module.exports.tagAndPush = tagAndPush; | ||||
| module.exports.checkBaseChanges = checkBaseChanges; | ||||
|  |  | |||
							
								
								
									
										25
									
								
								.github/workflows/publish.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										25
									
								
								.github/workflows/publish.yml
									
										
									
									
										vendored
									
									
								
							|  | @ -19,25 +19,23 @@ jobs: | |||
|     runs-on: ubuntu-latest | ||||
|     if: ${{ github.event.inputs.nightly != 'false' }} | ||||
|     steps: | ||||
|       # this checkout is required to make sure the GitHub Actions scripts are available | ||||
|       - uses: actions/checkout@v2 | ||||
|         name: Pre-checkout | ||||
|         with: | ||||
|           submodules: false | ||||
|       - uses: actions/github-script@v5 | ||||
|         id: check-changes | ||||
|         name: 'Check for new changes' | ||||
|         env: | ||||
|           # 24 hours | ||||
|           DETECTION_TIME_FRAME: 86400000 | ||||
|         with: | ||||
|           result-encoding: string | ||||
|           script: | | ||||
|             if (context.payload.inputs && context.payload.inputs.nightly === 'true') return true; | ||||
|             const delta = new Date() - new Date(context.payload.repository.pushed_at); | ||||
|             if (delta <= 86400000) { | ||||
|               return true; | ||||
|             } | ||||
|             console.log('No new changes detected.'); | ||||
|             return false; | ||||
|       # this checkout is required to make sure the GitHub Actions scripts are available | ||||
|       - uses: actions/checkout@v2 | ||||
|         if: ${{ steps.check-changes.outputs.result == 'true' }} | ||||
|         name: Pre-checkout | ||||
|         with: | ||||
|           submodules: false | ||||
|             const checkBaseChanges = require('./.github/workflows/ci-merge.js').checkBaseChanges; | ||||
|             return checkBaseChanges(github, context); | ||||
|       - run: npm install execa@5 | ||||
|         if: ${{ steps.check-changes.outputs.result == 'true' }} | ||||
|       - uses: actions/checkout@v2 | ||||
|  | @ -71,6 +69,9 @@ jobs: | |||
|       - uses: actions/github-script@v5 | ||||
|         id: check-changes | ||||
|         name: 'Check for new changes' | ||||
|         env: | ||||
|           # 24 hours | ||||
|           DETECTION_TIME_FRAME: 86400000 | ||||
|         with: | ||||
|           script: | | ||||
|             if (context.payload.inputs && context.payload.inputs.canary === 'true') return true; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue