mirror of
				https://github.com/docker/setup-qemu-action.git
				synced 2025-10-31 09:10:10 +08:00 
			
		
		
		
	Enhance workflow
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									9d419fda7d
								
							
						
					
					
						commit
						1f1f11dad8
					
				| @ -1,4 +1 @@ | |||||||
| /.dev |  | ||||||
| /dist |  | ||||||
| /lib |  | ||||||
| /node_modules | /node_modules | ||||||
|  | |||||||
							
								
								
									
										27
									
								
								.github/CONTRIBUTING.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										27
									
								
								.github/CONTRIBUTING.md
									
									
									
									
										vendored
									
									
								
							| @ -2,31 +2,20 @@ | |||||||
| 
 | 
 | ||||||
| Hi there! We're thrilled that you'd like to contribute to this project. Your help is essential for keeping it great. | Hi there! We're thrilled that you'd like to contribute to this project. Your help is essential for keeping it great. | ||||||
| 
 | 
 | ||||||
| Contributions to this project are [released](https://help.github.com/articles/github-terms-of-service/#6-contributions-under-repository-license) to the public under the [project's open source license](LICENSE). | Contributions to this project are [released](https://docs.github.com/en/github/site-policy/github-terms-of-service#6-contributions-under-repository-license) | ||||||
|  | to the public under the [project's open source license](LICENSE). | ||||||
| 
 | 
 | ||||||
| ## Submitting a pull request | ## Submitting a pull request | ||||||
| 
 | 
 | ||||||
| 1. [Fork](https://github.com/docker/setup-qemu-action/fork) and clone the repository | 1. [Fork](https://github.com/docker/setup-qemu-action/fork) and clone the repository | ||||||
| 2. Configure and install the dependencies: `yarn install` | 2. Configure and install the dependencies: `yarn install` | ||||||
| 4. Create a new branch: `git checkout -b my-branch-name` | 3. Create a new branch: `git checkout -b my-branch-name` | ||||||
| 5. Make your change | 4. Make your changes | ||||||
| 6. Run pre-checkin: `yarn run pre-checkin` | 5. Format code and build javascript artifacts: `docker buildx bake pre-checkin` | ||||||
|  | 6. Validate all code has correctly formatted and built: `docker buildx bake validate` | ||||||
| 7. Push to your fork and [submit a pull request](https://github.com/docker/setup-qemu-action/compare) | 7. Push to your fork and [submit a pull request](https://github.com/docker/setup-qemu-action/compare) | ||||||
| 8. Pat your self on the back and wait for your pull request to be reviewed and merged. | 8. Pat your self on the back and wait for your pull request to be reviewed and merged. | ||||||
| 
 | 
 | ||||||
| ## Container based developer flow |  | ||||||
| 
 |  | ||||||
| If you don't want to maintain a Node developer environment that fits this project you can use containerized commands |  | ||||||
| instead of invoking yarn directly. |  | ||||||
| 
 |  | ||||||
| ``` |  | ||||||
| # format code and build javascript artifacts |  | ||||||
| docker buildx bake pre-checkin |  | ||||||
| 
 |  | ||||||
| # validate all code has correctly formatted and built |  | ||||||
| docker buildx bake validate |  | ||||||
| ``` |  | ||||||
| 
 |  | ||||||
| Here are a few things you can do that will increase the likelihood of your pull request being accepted: | Here are a few things you can do that will increase the likelihood of your pull request being accepted: | ||||||
| 
 | 
 | ||||||
| - Make sure the `README.md` and any other relevant **documentation are kept up-to-date**. | - Make sure the `README.md` and any other relevant **documentation are kept up-to-date**. | ||||||
| @ -37,5 +26,5 @@ Here are a few things you can do that will increase the likelihood of your pull | |||||||
| ## Resources | ## Resources | ||||||
| 
 | 
 | ||||||
| - [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/) | - [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/) | ||||||
| - [Using Pull Requests](https://help.github.com/articles/about-pull-requests/) | - [Using Pull Requests](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests) | ||||||
| - [GitHub Help](https://help.github.com) | - [GitHub Help](https://docs.github.com/en) | ||||||
|  | |||||||
							
								
								
									
										3
									
								
								.github/ISSUE_TEMPLATE/bug_report.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.github/ISSUE_TEMPLATE/bug_report.md
									
									
									
									
										vendored
									
									
								
							| @ -30,4 +30,5 @@ about: Create a report to help us improve | |||||||
| 
 | 
 | ||||||
| ### Logs | ### Logs | ||||||
| 
 | 
 | ||||||
| > Download the [log file of your build](https://help.github.com/en/actions/configuring-and-managing-workflows/managing-a-workflow-run#downloading-logs) and [attach it](https://help.github.com/en/github/managing-your-work-on-github/file-attachments-on-issues-and-pull-requests) to this issue. | > Download the [log file of your build](https://docs.github.com/en/actions/managing-workflow-runs/using-workflow-run-logs#downloading-logs) | ||||||
|  | > and [attach it](https://docs.github.com/en/github/managing-your-work-on-github/file-attachments-on-issues-and-pull-requests) to this issue. | ||||||
|  | |||||||
							
								
								
									
										
											BIN
										
									
								
								.github/setup-qemu-action.png
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								.github/setup-qemu-action.png
									
									
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 12 KiB | 
							
								
								
									
										16
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							| @ -1,18 +1,18 @@ | |||||||
| name: ci | name: ci | ||||||
| 
 | 
 | ||||||
| on: | on: | ||||||
|  |   schedule: | ||||||
|  |     - cron: '0 10 * * *' # everyday at 10am | ||||||
|   push: |   push: | ||||||
|     branches: |     branches: | ||||||
|       - master |       - 'master' | ||||||
|       - releases/v* |       - 'releases/v*' | ||||||
|     paths-ignore: |     tags: | ||||||
|       - '**.md' |       - 'v*' | ||||||
|   pull_request: |   pull_request: | ||||||
|     branches: |     branches: | ||||||
|       - master |       - 'master' | ||||||
|       - releases/v* |       - 'releases/v*' | ||||||
|     paths-ignore: |  | ||||||
|       - '**.md' |  | ||||||
| 
 | 
 | ||||||
| jobs: | jobs: | ||||||
|   main: |   main: | ||||||
|  | |||||||
							
								
								
									
										5
									
								
								.github/workflows/validate.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.github/workflows/validate.yml
									
									
									
									
										vendored
									
									
								
							| @ -5,13 +5,10 @@ on: | |||||||
|     branches: |     branches: | ||||||
|       - 'master' |       - 'master' | ||||||
|       - 'releases/v*' |       - 'releases/v*' | ||||||
|     paths-ignore: |  | ||||||
|       - '**.md' |  | ||||||
|   pull_request: |   pull_request: | ||||||
|     branches: |     branches: | ||||||
|       - 'master' |       - 'master' | ||||||
|     paths-ignore: |       - 'releases/v*' | ||||||
|       - '**.md' |  | ||||||
| 
 | 
 | ||||||
| jobs: | jobs: | ||||||
|   validate: |   validate: | ||||||
|  | |||||||
							
								
								
									
										9
									
								
								dist/index.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								dist/index.js
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -103,9 +103,13 @@ function run() { | |||||||
|             } |             } | ||||||
|             const image = core.getInput('image') || 'tonistiigi/binfmt:latest'; |             const image = core.getInput('image') || 'tonistiigi/binfmt:latest'; | ||||||
|             const platforms = core.getInput('platforms') || 'all'; |             const platforms = core.getInput('platforms') || 'all'; | ||||||
|             core.info(`💎 Installing QEMU static binaries...`); |             core.startGroup(`Pulling binfmt Docker image`); | ||||||
|  |             yield exec.exec('docker', ['pull', image]); | ||||||
|  |             core.endGroup(); | ||||||
|  |             core.startGroup(`Installing QEMU static binaries`); | ||||||
|             yield exec.exec('docker', ['run', '--rm', '--privileged', image, '--install', platforms]); |             yield exec.exec('docker', ['run', '--rm', '--privileged', image, '--install', platforms]); | ||||||
|             core.info('🛒 Extracting available platforms...'); |             core.endGroup(); | ||||||
|  |             core.startGroup(`Extracting available platforms`); | ||||||
|             yield mexec.exec(`docker`, ['run', '--rm', '--privileged', image], true).then(res => { |             yield mexec.exec(`docker`, ['run', '--rm', '--privileged', image], true).then(res => { | ||||||
|                 if (res.stderr != '' && !res.success) { |                 if (res.stderr != '' && !res.success) { | ||||||
|                     throw new Error(res.stderr); |                     throw new Error(res.stderr); | ||||||
| @ -114,6 +118,7 @@ function run() { | |||||||
|                 core.info(`${platforms.supported.join(',')}`); |                 core.info(`${platforms.supported.join(',')}`); | ||||||
|                 core.setOutput('platforms', platforms.supported.join(',')); |                 core.setOutput('platforms', platforms.supported.join(',')); | ||||||
|             }); |             }); | ||||||
|  |             core.endGroup(); | ||||||
|         } |         } | ||||||
|         catch (error) { |         catch (error) { | ||||||
|             core.setFailed(error.message); |             core.setFailed(error.message); | ||||||
|  | |||||||
| @ -1,5 +1,11 @@ | |||||||
| variable "GITHUB_REPOSITORY" { | variable "NODE_VERSION" { | ||||||
|   default = "docker/setup-qemu-action" |   default = "12" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | target "node-version" { | ||||||
|  |   args = { | ||||||
|  |     NODE_VERSION = NODE_VERSION | ||||||
|  |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| group "default" { | group "default" { | ||||||
| @ -7,46 +13,48 @@ group "default" { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| group "pre-checkin" { | group "pre-checkin" { | ||||||
|   targets = ["update-yarn", "format", "build"] |   targets = ["vendor-update", "format", "build"] | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| group "validate" { | group "validate" { | ||||||
|   targets = ["validate-format", "validate-build", "validate-yarn"] |   targets = ["format-validate", "build-validate", "vendor-validate"] | ||||||
| } |  | ||||||
| 
 |  | ||||||
| target "dockerfile" { |  | ||||||
|   dockerfile = "Dockerfile.dev" |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| target "update-yarn" { |  | ||||||
|   inherits = ["dockerfile"] |  | ||||||
|   target = "update-yarn" |  | ||||||
|   output = ["."] |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| target "build" { | target "build" { | ||||||
|   inherits = ["dockerfile"] |   inherits = ["node-version"] | ||||||
|   target = "dist" |   dockerfile = "./hack/build.Dockerfile" | ||||||
|  |   target = "build-update" | ||||||
|   output = ["."] |   output = ["."] | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | target "build-validate" { | ||||||
|  |   inherits = ["node-version"] | ||||||
|  |   dockerfile = "./hack/build.Dockerfile" | ||||||
|  |   target = "build-validate" | ||||||
|  | } | ||||||
|  | 
 | ||||||
| target "format" { | target "format" { | ||||||
|   inherits = ["dockerfile"] |   inherits = ["node-version"] | ||||||
|   target = "format" |   dockerfile = "./hack/build.Dockerfile" | ||||||
|  |   target = "format-update" | ||||||
|   output = ["."] |   output = ["."] | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| target "validate-format" { | target "format-validate" { | ||||||
|   inherits = ["dockerfile"] |   inherits = ["node-version"] | ||||||
|   target = "validate-format" |   dockerfile = "./hack/build.Dockerfile" | ||||||
|  |   target = "format-validate" | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| target "validate-build" { | target "vendor-update" { | ||||||
|   inherits = ["dockerfile"] |   inherits = ["node-version"] | ||||||
|   target = "validate-build" |   dockerfile = "./hack/vendor.Dockerfile" | ||||||
|  |   target = "update" | ||||||
|  |   output = ["."] | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| target "validate-yarn" { | target "vendor-validate" { | ||||||
|   inherits = ["dockerfile"] |   inherits = ["node-version"] | ||||||
|   target = "validate-yarn" |   dockerfile = "./hack/vendor.Dockerfile" | ||||||
|  |   target = "validate" | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										42
									
								
								hack/build.Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								hack/build.Dockerfile
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,42 @@ | |||||||
|  | # syntax=docker/dockerfile:1.2 | ||||||
|  | ARG NODE_VERSION | ||||||
|  | 
 | ||||||
|  | FROM node:${NODE_VERSION}-alpine AS base | ||||||
|  | RUN apk add --no-cache cpio findutils git | ||||||
|  | WORKDIR /src | ||||||
|  | 
 | ||||||
|  | FROM base AS deps | ||||||
|  | RUN --mount=type=bind,target=.,rw \ | ||||||
|  |   --mount=type=cache,target=/src/node_modules \ | ||||||
|  |   yarn install | ||||||
|  | 
 | ||||||
|  | FROM deps AS build | ||||||
|  | RUN --mount=type=bind,target=.,rw \ | ||||||
|  |   --mount=type=cache,target=/src/node_modules \ | ||||||
|  |   yarn run build && mkdir /out && cp -Rf dist /out/ | ||||||
|  | 
 | ||||||
|  | FROM scratch AS build-update | ||||||
|  | COPY --from=build /out / | ||||||
|  | 
 | ||||||
|  | FROM build AS build-validate | ||||||
|  | RUN --mount=type=bind,target=.,rw \ | ||||||
|  |   git add -A && cp -rf /out/* .; \ | ||||||
|  |   if [ -n "$(git status --porcelain -- dist)" ]; then \ | ||||||
|  |     echo >&2 'ERROR: Build result differs. Please build first with "docker buildx bake build"'; \ | ||||||
|  |     git status --porcelain -- dist; \ | ||||||
|  |     exit 1; \ | ||||||
|  |   fi | ||||||
|  | 
 | ||||||
|  | FROM deps AS format | ||||||
|  | RUN --mount=type=bind,target=.,rw \ | ||||||
|  |   --mount=type=cache,target=/src/node_modules \ | ||||||
|  |   yarn run format \ | ||||||
|  |   && mkdir /out && find . -name '*.ts' -not -path './node_modules/*' | cpio -pdm /out | ||||||
|  | 
 | ||||||
|  | FROM scratch AS format-update | ||||||
|  | COPY --from=format /out / | ||||||
|  | 
 | ||||||
|  | FROM deps AS format-validate | ||||||
|  | RUN --mount=type=bind,target=.,rw \ | ||||||
|  |   --mount=type=cache,target=/src/node_modules \ | ||||||
|  |   yarn run format-check \ | ||||||
							
								
								
									
										23
									
								
								hack/vendor.Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								hack/vendor.Dockerfile
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,23 @@ | |||||||
|  | # syntax=docker/dockerfile:1.2 | ||||||
|  | ARG NODE_VERSION | ||||||
|  | 
 | ||||||
|  | FROM node:${NODE_VERSION}-alpine AS base | ||||||
|  | RUN apk add --no-cache git | ||||||
|  | WORKDIR /src | ||||||
|  | 
 | ||||||
|  | FROM base AS vendored | ||||||
|  | RUN --mount=type=bind,target=.,rw \ | ||||||
|  |   --mount=type=cache,target=/src/node_modules \ | ||||||
|  |   yarn install && mkdir /out && cp yarn.lock /out | ||||||
|  | 
 | ||||||
|  | FROM scratch AS update | ||||||
|  | COPY --from=vendored /out / | ||||||
|  | 
 | ||||||
|  | FROM vendored AS validate | ||||||
|  | RUN --mount=type=bind,target=.,rw \ | ||||||
|  |   git add -A && cp -rf /out/* .; \ | ||||||
|  |   if [ -n "$(git status --porcelain -- yarn.lock)" ]; then \ | ||||||
|  |     echo >&2 'ERROR: Vendor result differs. Please vendor your package with "docker buildx bake vendor-update"'; \ | ||||||
|  |     git status --porcelain -- yarn.lock; \ | ||||||
|  |     exit 1; \ | ||||||
|  |   fi | ||||||
							
								
								
									
										12
									
								
								src/main.ts
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								src/main.ts
									
									
									
									
									
								
							| @ -18,10 +18,15 @@ async function run(): Promise<void> { | |||||||
|     const image: string = core.getInput('image') || 'tonistiigi/binfmt:latest'; |     const image: string = core.getInput('image') || 'tonistiigi/binfmt:latest'; | ||||||
|     const platforms: string = core.getInput('platforms') || 'all'; |     const platforms: string = core.getInput('platforms') || 'all'; | ||||||
| 
 | 
 | ||||||
|     core.info(`💎 Installing QEMU static binaries...`); |     core.startGroup(`Pulling binfmt Docker image`); | ||||||
|     await exec.exec('docker', ['run', '--rm', '--privileged', image, '--install', platforms]); |     await exec.exec('docker', ['pull', image]); | ||||||
|  |     core.endGroup(); | ||||||
| 
 | 
 | ||||||
|     core.info('🛒 Extracting available platforms...'); |     core.startGroup(`Installing QEMU static binaries`); | ||||||
|  |     await exec.exec('docker', ['run', '--rm', '--privileged', image, '--install', platforms]); | ||||||
|  |     core.endGroup(); | ||||||
|  | 
 | ||||||
|  |     core.startGroup(`Extracting available platforms`); | ||||||
|     await mexec.exec(`docker`, ['run', '--rm', '--privileged', image], true).then(res => { |     await mexec.exec(`docker`, ['run', '--rm', '--privileged', image], true).then(res => { | ||||||
|       if (res.stderr != '' && !res.success) { |       if (res.stderr != '' && !res.success) { | ||||||
|         throw new Error(res.stderr); |         throw new Error(res.stderr); | ||||||
| @ -30,6 +35,7 @@ async function run(): Promise<void> { | |||||||
|       core.info(`${platforms.supported.join(',')}`); |       core.info(`${platforms.supported.join(',')}`); | ||||||
|       core.setOutput('platforms', platforms.supported.join(',')); |       core.setOutput('platforms', platforms.supported.join(',')); | ||||||
|     }); |     }); | ||||||
|  |     core.endGroup(); | ||||||
|   } catch (error) { |   } catch (error) { | ||||||
|     core.setFailed(error.message); |     core.setFailed(error.message); | ||||||
|   } |   } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 CrazyMax
						CrazyMax