mirror of
				https://github.com/docker/build-push-action.git
				synced 2025-10-29 13:17:35 +08: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 |         uses: actions/checkout@v2.3.1 | ||||||
|       - |       - | ||||||
|         name: Set up QEMU |         name: Set up QEMU | ||||||
|  |         id: qemu | ||||||
|         uses: ./setup-qemu/ |         uses: ./setup-qemu/ | ||||||
|         with: |         with: | ||||||
|           image: ${{ matrix.image }} |           image: ${{ matrix.image }} | ||||||
|           platforms: ${{ matrix.platforms }} |           platforms: ${{ matrix.platforms }} | ||||||
|  |       - | ||||||
|  |         name: Available platforms | ||||||
|  |         run: echo ${{ steps.qemu.outputs.platforms }} | ||||||
|  | |||||||
| @ -30,10 +30,14 @@ jobs: | |||||||
|         uses: actions/checkout@v2 |         uses: actions/checkout@v2 | ||||||
|       - |       - | ||||||
|         name: Set up QEMU |         name: Set up QEMU | ||||||
|  |         id: qemu | ||||||
|         uses: docker/actions/setup-qemu@v1 |         uses: docker/actions/setup-qemu@v1 | ||||||
|         with: |         with: | ||||||
|           image: tonistiigi/binfmt:latest |           image: tonistiigi/binfmt:latest | ||||||
|           platforms: all |           platforms: all | ||||||
|  |       - | ||||||
|  |         name: Available platforms | ||||||
|  |         run: echo ${{ steps.qemu.outputs.platforms }} | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| ## Customizing | ## 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) | | | `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` | | | `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 | ## 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). | 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' |     default: 'all' | ||||||
|     required: false |     required: false | ||||||
| 
 | 
 | ||||||
|  | outputs: | ||||||
|  |   platforms: | ||||||
|  |     description: 'Available platforms (comma separated)' | ||||||
|  | 
 | ||||||
| runs: | runs: | ||||||
|   using: 'node12' |   using: 'node12' | ||||||
|   main: 'dist/index.js' |   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 os from 'os'; | ||||||
| import * as core from '@actions/core'; | 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> { | async function run(): Promise<void> { | ||||||
|   try { |   try { | ||||||
| @ -13,7 +18,15 @@ async function run(): Promise<void> { | |||||||
|     const platforms: string = core.getInput('platforms') || 'all'; |     const platforms: string = core.getInput('platforms') || 'all'; | ||||||
| 
 | 
 | ||||||
|     core.info(`💎 Installing QEMU static binaries...`); |     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) { |   } catch (error) { | ||||||
|     core.setFailed(error.message); |     core.setFailed(error.message); | ||||||
|   } |   } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 CrazyMax
						CrazyMax