Container based developer flow
Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									c58c6870a2
								
							
						
					
					
						commit
						0307a522bb
					
				
							
								
								
									
										1
									
								
								.dockerignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.dockerignore
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | node_modules | ||||||
							
								
								
									
										15
									
								
								.github/CONTRIBUTING.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								.github/CONTRIBUTING.md
									
									
									
									
										vendored
									
									
								
							| @ -15,6 +15,21 @@ Contributions to this project are [released](https://help.github.com/articles/gi | |||||||
| 7. Push to your fork and [submit a pull request](https://github.com/docker/build-push-action/compare) | 7. Push to your fork and [submit a pull request](https://github.com/docker/build-push-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 | ||||||
|  | 
 | ||||||
|  | # run tests | ||||||
|  | docker buildx bake test | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
| 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**. | ||||||
|  | |||||||
							
								
								
									
										13
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								.github/workflows/test.yml
									
									
									
									
										vendored
									
									
								
							| @ -9,6 +9,19 @@ on: | |||||||
|       - master |       - master | ||||||
| 
 | 
 | ||||||
| jobs: | jobs: | ||||||
|  |   test-containerized: | ||||||
|  |     runs-on: ubuntu-latest | ||||||
|  |     steps: | ||||||
|  |       - | ||||||
|  |         name: Checkout | ||||||
|  |         uses: actions/checkout@v2.3.3 | ||||||
|  |       - | ||||||
|  |         name: Validate | ||||||
|  |         run: docker buildx bake validate | ||||||
|  |       - | ||||||
|  |         name: Test | ||||||
|  |         run: docker buildx bake test | ||||||
|  | 
 | ||||||
|   test: |   test: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|     steps: |     steps: | ||||||
|  | |||||||
							
								
								
									
										52
									
								
								Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								Dockerfile
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,52 @@ | |||||||
|  | #syntax=docker/dockerfile:1.1-experimental | ||||||
|  | 
 | ||||||
|  | FROM node:12 AS deps | ||||||
|  | WORKDIR /src | ||||||
|  | COPY package.json yarn.lock ./ | ||||||
|  | RUN --mount=type=cache,target=/usr/local/share/.cache/yarn \ | ||||||
|  |   yarn install | ||||||
|  | 
 | ||||||
|  | FROM scratch AS update-yarn | ||||||
|  | COPY --from=deps /src/yarn.lock / | ||||||
|  | 
 | ||||||
|  | FROM deps AS validate-yarn | ||||||
|  | COPY .git .git | ||||||
|  | RUN status=$(git status --porcelain -- yarn.lock); if [ -n "$status" ]; then echo $status; exit 1; fi | ||||||
|  | 
 | ||||||
|  | FROM deps AS base | ||||||
|  | COPY . . | ||||||
|  | 
 | ||||||
|  | FROM base AS build | ||||||
|  | RUN yarn build | ||||||
|  | 
 | ||||||
|  | FROM deps AS test | ||||||
|  | COPY --from=docker /usr/local/bin/docker /usr/bin/ | ||||||
|  | ARG TARGETOS | ||||||
|  | ARG TARGETARCH | ||||||
|  | ARG BUILDX_VERSION=v0.4.2 | ||||||
|  | ENV RUNNER_TEMP=/tmp/github_runner | ||||||
|  | ENV RUNNER_TOOL_CACHE=/tmp/github_tool_cache | ||||||
|  | RUN mkdir -p /usr/local/lib/docker/cli-plugins && \ | ||||||
|  |   curl -fsSL https://github.com/docker/buildx/releases/download/$BUILDX_VERSION/buildx-$BUILDX_VERSION.$TARGETOS-$TARGETARCH > /usr/local/lib/docker/cli-plugins/docker-buildx && \ | ||||||
|  |   chmod +x /usr/local/lib/docker/cli-plugins/docker-buildx && \ | ||||||
|  |   docker buildx version | ||||||
|  | COPY . . | ||||||
|  | RUN yarn run test | ||||||
|  | 
 | ||||||
|  | FROM base AS run-format | ||||||
|  | RUN yarn run format | ||||||
|  | 
 | ||||||
|  | FROM scratch AS format | ||||||
|  | COPY --from=run-format /src/src/*.ts /src/ | ||||||
|  | 
 | ||||||
|  | FROM base AS validate-format | ||||||
|  | RUN yarn run format-check | ||||||
|  | 
 | ||||||
|  | FROM scratch AS dist | ||||||
|  | COPY --from=build /src/dist/ /dist/ | ||||||
|  | 
 | ||||||
|  | FROM build AS validate-build | ||||||
|  | RUN status=$(git status --porcelain -- dist); if [ -n "$status" ]; then echo $status; exit 1; fi | ||||||
|  | 
 | ||||||
|  | FROM base AS dev | ||||||
|  | ENTRYPOINT ["bash"] | ||||||
| @ -2,6 +2,7 @@ import * as fs from 'fs'; | |||||||
| import * as path from 'path'; | import * as path from 'path'; | ||||||
| import * as semver from 'semver'; | import * as semver from 'semver'; | ||||||
| import * as buildx from '../src/buildx'; | import * as buildx from '../src/buildx'; | ||||||
|  | import * as docker from '../src/docker'; | ||||||
| import * as exec from '@actions/exec'; | import * as exec from '@actions/exec'; | ||||||
| import * as context from '../src/context'; | import * as context from '../src/context'; | ||||||
| 
 | 
 | ||||||
| @ -91,11 +92,18 @@ describe('isLocalOrTarExporter', () => { | |||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| describe('getVersion', () => { | describe('getVersion', () => { | ||||||
|   it('valid', async () => { |   async function isDaemonRunning() { | ||||||
|     const version = await buildx.getVersion(); |     return await docker.isDaemonRunning(); | ||||||
|     console.log(`version: ${version}`); |   } | ||||||
|     expect(semver.valid(version)).not.toBeNull(); |   (isDaemonRunning() ? it : it.skip)( | ||||||
|   }, 100000); |     'valid', | ||||||
|  |     async () => { | ||||||
|  |       const version = await buildx.getVersion(); | ||||||
|  |       console.log(`version: ${version}`); | ||||||
|  |       expect(semver.valid(version)).not.toBeNull(); | ||||||
|  |     }, | ||||||
|  |     100000 | ||||||
|  |   ); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| describe('parseVersion', () => { | describe('parseVersion', () => { | ||||||
|  | |||||||
							
								
								
									
										3305
									
								
								dist/index.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3305
									
								
								dist/index.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										42
									
								
								docker-bake.hcl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								docker-bake.hcl
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,42 @@ | |||||||
|  | group "default" { | ||||||
|  |   targets = ["build"] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | group "pre-checkin" { | ||||||
|  |   targets = ["update-yarn", "format", "build"] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | group "validate" { | ||||||
|  | 	targets = ["validate-format", "validate-build", "validate-yarn"] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | target "update-yarn" { | ||||||
|  |   target = "update-yarn" | ||||||
|  |   output = ["."] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | target "build" { | ||||||
|  |   target = "dist" | ||||||
|  |   output = ["."] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | target "test" { | ||||||
|  |   target = "test" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | target "format" { | ||||||
|  |   target = "format" | ||||||
|  |   output = ["."] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | target "validate-format" { | ||||||
|  |   target = "validate-format" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | target "validate-build" { | ||||||
|  |   target = "validate-build" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | target "validate-yarn" { | ||||||
|  | 	target = "validate-yarn" | ||||||
|  | } | ||||||
							
								
								
									
										7
									
								
								src/docker.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/docker.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | |||||||
|  | import * as exec from './exec'; | ||||||
|  | 
 | ||||||
|  | export async function isDaemonRunning(): Promise<boolean> { | ||||||
|  |   return await exec.exec(`docker`, ['version', '--format', '{{.Server.Os}}'], true).then(res => { | ||||||
|  |     return !res.stdout.includes(' ') && res.success; | ||||||
|  |   }); | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 CrazyMax
						CrazyMax