mirror of
				https://gitea.com/docker/build-push-action.git
				synced 2025-10-31 00:58:18 +07:00 
			
		
		
		
	Output available platforms for setup-qemu
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									674ff6ada6
								
							
						
					
					
						commit
						2f906a9cb7
					
				
							
								
								
									
										4
									
								
								.github/workflows/setup-qemu-ci.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/setup-qemu-ci.yml
									
									
									
									
										vendored
									
									
								
							| @ -38,7 +38,11 @@ jobs: | ||||
|         uses: actions/checkout@v2.3.1 | ||||
|       - | ||||
|         name: Set up QEMU | ||||
|         id: qemu | ||||
|         uses: ./setup-qemu/ | ||||
|         with: | ||||
|           image: ${{ matrix.image }} | ||||
|           platforms: ${{ matrix.platforms }} | ||||
|       - | ||||
|         name: Available platforms | ||||
|         run: echo ${{ steps.qemu.outputs.platforms }} | ||||
|  | ||||
| @ -30,10 +30,14 @@ jobs: | ||||
|         uses: actions/checkout@v2 | ||||
|       - | ||||
|         name: Set up QEMU | ||||
|         id: qemu | ||||
|         uses: docker/actions/setup-qemu@v1 | ||||
|         with: | ||||
|           image: tonistiigi/binfmt:latest | ||||
|           platforms: all | ||||
|       - | ||||
|         name: Available platforms | ||||
|         run: echo ${{ steps.qemu.outputs.platforms }} | ||||
| ``` | ||||
| 
 | ||||
| ## Customizing | ||||
| @ -47,6 +51,14 @@ Following inputs can be used as `step.with` keys | ||||
| | `image`          | String  | `tonistiigi/binfmt:latest`  | QEMU static binaries Docker image. Example: [`tonistiigi/binfmt:latest`](https://hub.docker.com/r/tonistiigi/binfmt/tags) | | ||||
| | `platforms`      | String  | `all`                       | Platforms to install. Example: `arm64,riscv64,arm` | | ||||
| 
 | ||||
| ### outputs | ||||
| 
 | ||||
| Following outputs are available | ||||
| 
 | ||||
| | Name          | Type    | Description                           | | ||||
| |---------------|---------|---------------------------------------| | ||||
| | `platforms`   | String  | Available platforms (comma separated) | | ||||
| 
 | ||||
| ## Limitation | ||||
| 
 | ||||
| This action is only available for Linux [virtual environments](https://help.github.com/en/articles/virtual-environments-for-github-actions#supported-virtual-environments-and-hardware-resources). | ||||
|  | ||||
| @ -16,6 +16,10 @@ inputs: | ||||
|     default: 'all' | ||||
|     required: false | ||||
| 
 | ||||
| outputs: | ||||
|   platforms: | ||||
|     description: 'Available platforms (comma separated)' | ||||
| 
 | ||||
| runs: | ||||
|   using: 'node12' | ||||
|   main: 'dist/index.js' | ||||
|  | ||||
							
								
								
									
										34
									
								
								setup-qemu/src/exec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								setup-qemu/src/exec.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,34 @@ | ||||
| import * as actionsExec from '@actions/exec'; | ||||
| import {ExecOptions} from '@actions/exec'; | ||||
| 
 | ||||
| export interface ExecResult { | ||||
|   success: boolean; | ||||
|   stdout: string; | ||||
|   stderr: string; | ||||
| } | ||||
| 
 | ||||
| export const exec = async (command: string, args: string[] = [], silent: boolean): Promise<ExecResult> => { | ||||
|   let stdout: string = ''; | ||||
|   let stderr: string = ''; | ||||
| 
 | ||||
|   const options: ExecOptions = { | ||||
|     silent: silent, | ||||
|     ignoreReturnCode: true | ||||
|   }; | ||||
|   options.listeners = { | ||||
|     stdout: (data: Buffer) => { | ||||
|       stdout += data.toString(); | ||||
|     }, | ||||
|     stderr: (data: Buffer) => { | ||||
|       stderr += data.toString(); | ||||
|     } | ||||
|   }; | ||||
| 
 | ||||
|   const returnCode: number = await actionsExec.exec(command, args, options); | ||||
| 
 | ||||
|   return { | ||||
|     success: returnCode === 0, | ||||
|     stdout: stdout.trim(), | ||||
|     stderr: stderr.trim() | ||||
|   }; | ||||
| }; | ||||
| @ -1,6 +1,11 @@ | ||||
| import * as os from 'os'; | ||||
| import * as core from '@actions/core'; | ||||
| import * as exec from '@actions/exec'; | ||||
| import * as exec from './exec'; | ||||
| 
 | ||||
| interface Platforms { | ||||
|   supported: string[]; | ||||
|   available: string[]; | ||||
| } | ||||
| 
 | ||||
| async function run(): Promise<void> { | ||||
|   try { | ||||
| @ -13,7 +18,15 @@ async function run(): Promise<void> { | ||||
|     const platforms: string = core.getInput('platforms') || 'all'; | ||||
| 
 | ||||
|     core.info(`💎 Installing QEMU static binaries...`); | ||||
|     await exec.exec('docker', ['run', '--rm', '--privileged', image, '--install', platforms]); | ||||
|     await exec.exec(`docker`, ['run', '--rm', '--privileged', image, '--install', platforms], false).then(res => { | ||||
|       if (res.stderr != '' && !res.success) { | ||||
|         throw new Error(res.stderr); | ||||
|       } | ||||
| 
 | ||||
|       core.info('🛒 Extracting available platforms...'); | ||||
|       const platforms: Platforms = JSON.parse(res.stdout.trim()); | ||||
|       core.setOutput('platforms', platforms.supported.join(',')); | ||||
|     }); | ||||
|   } catch (error) { | ||||
|     core.setFailed(error.message); | ||||
|   } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user