Merge pull request #571 from crazy-max/update-dev
chore: update dev dependencies and workflow
This commit is contained in:
		
						commit
						75c825aabc
					
				
							
								
								
									
										23
									
								
								.eslintrc.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								.eslintrc.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "env": {
 | 
				
			||||||
 | 
					    "node": true,
 | 
				
			||||||
 | 
					    "es2021": true,
 | 
				
			||||||
 | 
					    "jest/globals": true
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "extends": [
 | 
				
			||||||
 | 
					    "eslint:recommended",
 | 
				
			||||||
 | 
					    "plugin:@typescript-eslint/recommended",
 | 
				
			||||||
 | 
					    "plugin:jest/recommended",
 | 
				
			||||||
 | 
					    "plugin:prettier/recommended"
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "parser": "@typescript-eslint/parser",
 | 
				
			||||||
 | 
					  "parserOptions": {
 | 
				
			||||||
 | 
					    "ecmaVersion": "latest",
 | 
				
			||||||
 | 
					    "sourceType": "module"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "plugins": [
 | 
				
			||||||
 | 
					    "@typescript-eslint",
 | 
				
			||||||
 | 
					    "jest",
 | 
				
			||||||
 | 
					    "prettier"
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										18
									
								
								.github/workflows/virtual-env.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								.github/workflows/virtual-env.yml
									
									
									
									
										vendored
									
									
								
							@ -19,15 +19,33 @@ jobs:
 | 
				
			|||||||
      -
 | 
					      -
 | 
				
			||||||
        name: File system
 | 
					        name: File system
 | 
				
			||||||
        run: df -ah
 | 
					        run: df -ah
 | 
				
			||||||
 | 
					      -
 | 
				
			||||||
 | 
					        name: Mounts
 | 
				
			||||||
 | 
					        run: mount
 | 
				
			||||||
 | 
					      -
 | 
				
			||||||
 | 
					        name: Node info
 | 
				
			||||||
 | 
					        run: node -p process
 | 
				
			||||||
 | 
					      -
 | 
				
			||||||
 | 
					        name: NPM version
 | 
				
			||||||
 | 
					        run: npm version
 | 
				
			||||||
      -
 | 
					      -
 | 
				
			||||||
        name: List install packages
 | 
					        name: List install packages
 | 
				
			||||||
        run: apt list --installed
 | 
					        run: apt list --installed
 | 
				
			||||||
 | 
					      -
 | 
				
			||||||
 | 
					        name: Docker daemon conf
 | 
				
			||||||
 | 
					        run: |
 | 
				
			||||||
 | 
					          cat /etc/docker/daemon.json
 | 
				
			||||||
      -
 | 
					      -
 | 
				
			||||||
        name: Docker info
 | 
					        name: Docker info
 | 
				
			||||||
        run: docker info
 | 
					        run: docker info
 | 
				
			||||||
      -
 | 
					      -
 | 
				
			||||||
        name: Docker version
 | 
					        name: Docker version
 | 
				
			||||||
        run: docker version
 | 
					        run: docker version
 | 
				
			||||||
 | 
					      -
 | 
				
			||||||
 | 
					        name: Cgroups
 | 
				
			||||||
 | 
					        run: |
 | 
				
			||||||
 | 
					          sudo apt-get install -y cgroup-tools
 | 
				
			||||||
 | 
					          lscgroup
 | 
				
			||||||
      -
 | 
					      -
 | 
				
			||||||
        name: buildx version
 | 
					        name: buildx version
 | 
				
			||||||
        run: docker buildx version
 | 
					        run: docker buildx version
 | 
				
			||||||
 | 
				
			|||||||
@ -1,8 +1,8 @@
 | 
				
			|||||||
 | 
					import {describe, expect, it, jest, test} from '@jest/globals';
 | 
				
			||||||
import * as fs from 'fs';
 | 
					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 exec from '@actions/exec';
 | 
					import * as exec from '@actions/exec';
 | 
				
			||||||
 | 
					 | 
				
			||||||
import * as buildx from '../src/buildx';
 | 
					import * as buildx from '../src/buildx';
 | 
				
			||||||
import * as context from '../src/context';
 | 
					import * as context from '../src/context';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -53,69 +53,25 @@ describe('getDigest', () => {
 | 
				
			|||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
describe('isLocalOrTarExporter', () => {
 | 
					describe('isLocalOrTarExporter', () => {
 | 
				
			||||||
  // prettier-ignore
 | 
					 | 
				
			||||||
  test.each([
 | 
					  test.each([
 | 
				
			||||||
    [
 | 
					    [['type=registry,ref=user/app'], false],
 | 
				
			||||||
      [
 | 
					    [['type=docker'], false],
 | 
				
			||||||
        'type=registry,ref=user/app',
 | 
					    [['type=local,dest=./release-out'], true],
 | 
				
			||||||
      ],
 | 
					    [['type=tar,dest=/tmp/image.tar'], true],
 | 
				
			||||||
      false
 | 
					    [['type=docker', 'type=tar,dest=/tmp/image.tar'], true],
 | 
				
			||||||
    ],
 | 
					    [['"type=tar","dest=/tmp/image.tar"'], true],
 | 
				
			||||||
    [
 | 
					    [['" type= local" , dest=./release-out'], true],
 | 
				
			||||||
      [
 | 
					    [['.'], true]
 | 
				
			||||||
        'type=docker',
 | 
					  ])('given %p returns %p', async (outputs: Array<string>, expected: boolean) => {
 | 
				
			||||||
      ],
 | 
					 | 
				
			||||||
      false
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    [
 | 
					 | 
				
			||||||
      [
 | 
					 | 
				
			||||||
        'type=local,dest=./release-out'
 | 
					 | 
				
			||||||
      ],
 | 
					 | 
				
			||||||
      true
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    [
 | 
					 | 
				
			||||||
      [
 | 
					 | 
				
			||||||
        'type=tar,dest=/tmp/image.tar'
 | 
					 | 
				
			||||||
      ],
 | 
					 | 
				
			||||||
      true
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    [
 | 
					 | 
				
			||||||
      [
 | 
					 | 
				
			||||||
        'type=docker',
 | 
					 | 
				
			||||||
        'type=tar,dest=/tmp/image.tar'
 | 
					 | 
				
			||||||
      ],
 | 
					 | 
				
			||||||
      true
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    [
 | 
					 | 
				
			||||||
      [
 | 
					 | 
				
			||||||
        '"type=tar","dest=/tmp/image.tar"'
 | 
					 | 
				
			||||||
      ],
 | 
					 | 
				
			||||||
      true
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    [
 | 
					 | 
				
			||||||
      [
 | 
					 | 
				
			||||||
        '" type= local" , dest=./release-out'
 | 
					 | 
				
			||||||
      ],
 | 
					 | 
				
			||||||
      true
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    [
 | 
					 | 
				
			||||||
      [
 | 
					 | 
				
			||||||
        '.'
 | 
					 | 
				
			||||||
      ],
 | 
					 | 
				
			||||||
      true
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
  ])(
 | 
					 | 
				
			||||||
    'given %p returns %p',
 | 
					 | 
				
			||||||
    async (outputs: Array<string>, expected: boolean) => {
 | 
					 | 
				
			||||||
    expect(buildx.isLocalOrTarExporter(outputs)).toEqual(expected);
 | 
					    expect(buildx.isLocalOrTarExporter(outputs)).toEqual(expected);
 | 
				
			||||||
    }
 | 
					  });
 | 
				
			||||||
  );
 | 
					 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
describe('isAvailable', () => {
 | 
					describe('isAvailable', () => {
 | 
				
			||||||
  const execSpy: jest.SpyInstance = jest.spyOn(exec, 'getExecOutput');
 | 
					  const execSpy = jest.spyOn(exec, 'getExecOutput');
 | 
				
			||||||
  buildx.isAvailable();
 | 
					  buildx.isAvailable();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // eslint-disable-next-line jest/no-standalone-expect
 | 
				
			||||||
  expect(execSpy).toHaveBeenCalledWith(`docker`, ['buildx'], {
 | 
					  expect(execSpy).toHaveBeenCalledWith(`docker`, ['buildx'], {
 | 
				
			||||||
    silent: true,
 | 
					    silent: true,
 | 
				
			||||||
    ignoreReturnCode: true
 | 
					    ignoreReturnCode: true
 | 
				
			||||||
@ -123,24 +79,10 @@ describe('isAvailable', () => {
 | 
				
			|||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
describe('getVersion', () => {
 | 
					describe('getVersion', () => {
 | 
				
			||||||
  async function isDaemonRunning() {
 | 
					  it('valid', async () => {
 | 
				
			||||||
    return await exec
 | 
					 | 
				
			||||||
      .getExecOutput(`docker`, ['version', '--format', '{{.Server.Os}}'], {
 | 
					 | 
				
			||||||
        ignoreReturnCode: true,
 | 
					 | 
				
			||||||
        silent: true
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
      .then(res => {
 | 
					 | 
				
			||||||
        return !res.stdout.includes(' ') && res.exitCode == 0;
 | 
					 | 
				
			||||||
      });
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  (isDaemonRunning() ? it : it.skip)(
 | 
					 | 
				
			||||||
    'valid',
 | 
					 | 
				
			||||||
    async () => {
 | 
					 | 
				
			||||||
    const version = await buildx.getVersion();
 | 
					    const version = await buildx.getVersion();
 | 
				
			||||||
    expect(semver.valid(version)).not.toBeNull();
 | 
					    expect(semver.valid(version)).not.toBeNull();
 | 
				
			||||||
    },
 | 
					  });
 | 
				
			||||||
    100000
 | 
					 | 
				
			||||||
  );
 | 
					 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
describe('parseVersion', () => {
 | 
					describe('parseVersion', () => {
 | 
				
			||||||
@ -187,6 +129,7 @@ describe('getSecret', () => {
 | 
				
			|||||||
      const secretValue = await fs.readFileSync(tmpNameSync, 'utf-8');
 | 
					      const secretValue = await fs.readFileSync(tmpNameSync, 'utf-8');
 | 
				
			||||||
      expect(secretValue).toEqual(exValue);
 | 
					      expect(secretValue).toEqual(exValue);
 | 
				
			||||||
    } catch (err) {
 | 
					    } catch (err) {
 | 
				
			||||||
 | 
					      // eslint-disable-next-line jest/no-conditional-expect
 | 
				
			||||||
      expect(true).toBe(invalid);
 | 
					      expect(true).toBe(invalid);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
				
			|||||||
@ -1,3 +1,4 @@
 | 
				
			|||||||
 | 
					import {beforeEach, describe, expect, it, jest, test} from '@jest/globals';
 | 
				
			||||||
import * as fs from 'fs';
 | 
					import * as fs from 'fs';
 | 
				
			||||||
import * as os from 'os';
 | 
					import * as os from 'os';
 | 
				
			||||||
import * as path from 'path';
 | 
					import * as path from 'path';
 | 
				
			||||||
@ -517,8 +518,8 @@ nproc=3`],
 | 
				
			|||||||
    ],
 | 
					    ],
 | 
				
			||||||
  ])(
 | 
					  ])(
 | 
				
			||||||
    '[%d] given %p with %p as inputs, returns %p',
 | 
					    '[%d] given %p with %p as inputs, returns %p',
 | 
				
			||||||
    async (num: number, buildxVersion: string, inputs: Map<string, any>, expected: Array<string>) => {
 | 
					    async (num: number, buildxVersion: string, inputs: Map<string, string>, expected: Array<string>) => {
 | 
				
			||||||
      await inputs.forEach((value: string, name: string) => {
 | 
					      inputs.forEach((value: string, name: string) => {
 | 
				
			||||||
        setInput(name, value);
 | 
					        setInput(name, value);
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
      const defContext = context.defaultContext();
 | 
					      const defContext = context.defaultContext();
 | 
				
			||||||
@ -666,7 +667,7 @@ FOO=bar`
 | 
				
			|||||||
    expect(res).toEqual([
 | 
					    expect(res).toEqual([
 | 
				
			||||||
      'GIT_AUTH_TOKEN=abcdefgh,ijklmno=0123456789',
 | 
					      'GIT_AUTH_TOKEN=abcdefgh,ijklmno=0123456789',
 | 
				
			||||||
      `MYSECRET=aaaaaaaa
 | 
					      `MYSECRET=aaaaaaaa
 | 
				
			||||||
bbbb\"bbb
 | 
					bbbb"bbb
 | 
				
			||||||
ccccccccc`,
 | 
					ccccccccc`,
 | 
				
			||||||
      'FOO=bar'
 | 
					      'FOO=bar'
 | 
				
			||||||
    ]);
 | 
					    ]);
 | 
				
			||||||
@ -688,19 +689,22 @@ describe('asyncForEach', () => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
describe('setOutput', () => {
 | 
					describe('setOutput', () => {
 | 
				
			||||||
  beforeEach(() => {
 | 
					  beforeEach(() => {
 | 
				
			||||||
    process.stdout.write = jest.fn();
 | 
					    process.stdout.write = jest.fn() as typeof process.stdout.write;
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // eslint-disable-next-line jest/expect-expect
 | 
				
			||||||
  it('setOutput produces the correct command', () => {
 | 
					  it('setOutput produces the correct command', () => {
 | 
				
			||||||
    context.setOutput('some output', 'some value');
 | 
					    context.setOutput('some output', 'some value');
 | 
				
			||||||
    assertWriteCalls([`::set-output name=some output::some value${os.EOL}`]);
 | 
					    assertWriteCalls([`::set-output name=some output::some value${os.EOL}`]);
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // eslint-disable-next-line jest/expect-expect
 | 
				
			||||||
  it('setOutput handles bools', () => {
 | 
					  it('setOutput handles bools', () => {
 | 
				
			||||||
    context.setOutput('some output', false);
 | 
					    context.setOutput('some output', false);
 | 
				
			||||||
    assertWriteCalls([`::set-output name=some output::false${os.EOL}`]);
 | 
					    assertWriteCalls([`::set-output name=some output::false${os.EOL}`]);
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // eslint-disable-next-line jest/expect-expect
 | 
				
			||||||
  it('setOutput handles numbers', () => {
 | 
					  it('setOutput handles numbers', () => {
 | 
				
			||||||
    context.setOutput('some output', 1.01);
 | 
					    context.setOutput('some output', 1.01);
 | 
				
			||||||
    assertWriteCalls([`::set-output name=some output::1.01${os.EOL}`]);
 | 
					    assertWriteCalls([`::set-output name=some output::1.01${os.EOL}`]);
 | 
				
			||||||
 | 
				
			|||||||
@ -1,8 +1,8 @@
 | 
				
			|||||||
# syntax=docker/dockerfile:1.3-labs
 | 
					# syntax=docker/dockerfile:1.4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ARG NODE_VERSION
 | 
					ARG NODE_VERSION=12
 | 
				
			||||||
ARG DOCKER_VERSION=20.10.10
 | 
					ARG DOCKER_VERSION=20.10.13
 | 
				
			||||||
ARG BUILDX_VERSION=0.7.0
 | 
					ARG BUILDX_VERSION=0.8.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FROM node:${NODE_VERSION}-alpine AS base
 | 
					FROM node:${NODE_VERSION}-alpine AS base
 | 
				
			||||||
RUN apk add --no-cache cpio findutils git
 | 
					RUN apk add --no-cache cpio findutils git
 | 
				
			||||||
@ -57,10 +57,10 @@ RUN --mount=type=bind,target=.,rw \
 | 
				
			|||||||
FROM scratch AS format-update
 | 
					FROM scratch AS format-update
 | 
				
			||||||
COPY --from=format /out /
 | 
					COPY --from=format /out /
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FROM deps AS format-validate
 | 
					FROM deps AS lint
 | 
				
			||||||
RUN --mount=type=bind,target=.,rw \
 | 
					RUN --mount=type=bind,target=.,rw \
 | 
				
			||||||
  --mount=type=cache,target=/src/node_modules \
 | 
					  --mount=type=cache,target=/src/node_modules \
 | 
				
			||||||
  yarn run format-check
 | 
					  yarn run lint
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FROM docker:${DOCKER_VERSION} as docker
 | 
					FROM docker:${DOCKER_VERSION} as docker
 | 
				
			||||||
FROM docker/buildx-bin:${BUILDX_VERSION} as buildx
 | 
					FROM docker/buildx-bin:${BUILDX_VERSION} as buildx
 | 
				
			||||||
							
								
								
									
										27907
									
								
								dist/index.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										27907
									
								
								dist/index.js
									
									
									
										generated
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								dist/index.js.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								dist/index.js.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1045
									
								
								dist/licenses.txt
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1045
									
								
								dist/licenses.txt
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1
									
								
								dist/sourcemap-register.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								dist/sourcemap-register.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@ -1,13 +1,3 @@
 | 
				
			|||||||
variable "NODE_VERSION" {
 | 
					 | 
				
			||||||
  default = "12"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
target "node-version" {
 | 
					 | 
				
			||||||
  args = {
 | 
					 | 
				
			||||||
    NODE_VERSION = NODE_VERSION
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
group "default" {
 | 
					group "default" {
 | 
				
			||||||
  targets = ["build"]
 | 
					  targets = ["build"]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -17,54 +7,47 @@ group "pre-checkin" {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
group "validate" {
 | 
					group "validate" {
 | 
				
			||||||
  targets = ["format-validate", "build-validate", "vendor-validate"]
 | 
					  targets = ["lint", "build-validate", "vendor-validate"]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
target "build" {
 | 
					target "build" {
 | 
				
			||||||
  inherits = ["node-version"]
 | 
					  dockerfile = "dev.Dockerfile"
 | 
				
			||||||
  dockerfile = "./hack/build.Dockerfile"
 | 
					 | 
				
			||||||
  target = "build-update"
 | 
					  target = "build-update"
 | 
				
			||||||
  output = ["."]
 | 
					  output = ["."]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
target "build-validate" {
 | 
					target "build-validate" {
 | 
				
			||||||
  inherits = ["node-version"]
 | 
					  dockerfile = "dev.Dockerfile"
 | 
				
			||||||
  dockerfile = "./hack/build.Dockerfile"
 | 
					 | 
				
			||||||
  target = "build-validate"
 | 
					  target = "build-validate"
 | 
				
			||||||
  output = ["type=cacheonly"]
 | 
					  output = ["type=cacheonly"]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
target "format" {
 | 
					target "format" {
 | 
				
			||||||
  inherits = ["node-version"]
 | 
					  dockerfile = "dev.Dockerfile"
 | 
				
			||||||
  dockerfile = "./hack/build.Dockerfile"
 | 
					 | 
				
			||||||
  target = "format-update"
 | 
					  target = "format-update"
 | 
				
			||||||
  output = ["."]
 | 
					  output = ["."]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
target "format-validate" {
 | 
					target "lint" {
 | 
				
			||||||
  inherits = ["node-version"]
 | 
					  dockerfile = "dev.Dockerfile"
 | 
				
			||||||
  dockerfile = "./hack/build.Dockerfile"
 | 
					  target = "lint"
 | 
				
			||||||
  target = "format-validate"
 | 
					 | 
				
			||||||
  output = ["type=cacheonly"]
 | 
					  output = ["type=cacheonly"]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
target "vendor-update" {
 | 
					target "vendor-update" {
 | 
				
			||||||
  inherits = ["node-version"]
 | 
					  dockerfile = "dev.Dockerfile"
 | 
				
			||||||
  dockerfile = "./hack/build.Dockerfile"
 | 
					 | 
				
			||||||
  target = "vendor-update"
 | 
					  target = "vendor-update"
 | 
				
			||||||
  output = ["."]
 | 
					  output = ["."]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
target "vendor-validate" {
 | 
					target "vendor-validate" {
 | 
				
			||||||
  inherits = ["node-version"]
 | 
					  dockerfile = "dev.Dockerfile"
 | 
				
			||||||
  dockerfile = "./hack/build.Dockerfile"
 | 
					 | 
				
			||||||
  target = "vendor-validate"
 | 
					  target = "vendor-validate"
 | 
				
			||||||
  output = ["type=cacheonly"]
 | 
					  output = ["type=cacheonly"]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
target "test" {
 | 
					target "test" {
 | 
				
			||||||
  inherits = ["node-version"]
 | 
					  dockerfile = "dev.Dockerfile"
 | 
				
			||||||
  dockerfile = "./hack/build.Dockerfile"
 | 
					 | 
				
			||||||
  target = "test-coverage"
 | 
					  target = "test-coverage"
 | 
				
			||||||
  output = ["./coverage"]
 | 
					  output = ["./coverage"]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -2,11 +2,9 @@ module.exports = {
 | 
				
			|||||||
  clearMocks: false,
 | 
					  clearMocks: false,
 | 
				
			||||||
  moduleFileExtensions: ['js', 'ts'],
 | 
					  moduleFileExtensions: ['js', 'ts'],
 | 
				
			||||||
  setupFiles: ["dotenv/config"],
 | 
					  setupFiles: ["dotenv/config"],
 | 
				
			||||||
  testEnvironment: 'node',
 | 
					 | 
				
			||||||
  testMatch: ['**/*.test.ts'],
 | 
					  testMatch: ['**/*.test.ts'],
 | 
				
			||||||
  testRunner: 'jest-circus/runner',
 | 
					 | 
				
			||||||
  transform: {
 | 
					  transform: {
 | 
				
			||||||
    '^.+\\.ts$': 'ts-jest'
 | 
					    '^.+\\.ts$': 'ts-jest'
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  verbose: false
 | 
					  verbose: true
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
							
								
								
									
										34
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								package.json
									
									
									
									
									
								
							@ -3,11 +3,11 @@
 | 
				
			|||||||
  "description": "Build and push Docker images",
 | 
					  "description": "Build and push Docker images",
 | 
				
			||||||
  "main": "lib/main.js",
 | 
					  "main": "lib/main.js",
 | 
				
			||||||
  "scripts": {
 | 
					  "scripts": {
 | 
				
			||||||
    "build": "tsc && ncc build",
 | 
					    "build": "ncc build src/main.ts --source-map --minify --license licenses.txt",
 | 
				
			||||||
    "format": "prettier --write **/*.ts",
 | 
					    "lint": "eslint src/**/*.ts __tests__/**/*.ts",
 | 
				
			||||||
    "format-check": "prettier --check **/*.ts",
 | 
					    "format": "eslint --fix src/**/*.ts __tests__/**/*.ts",
 | 
				
			||||||
    "test": "jest --coverage",
 | 
					    "test": "jest --coverage",
 | 
				
			||||||
    "pre-checkin": "yarn run format && yarn run build"
 | 
					    "all": "yarn run build && yarn run format && yarn test"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "repository": {
 | 
					  "repository": {
 | 
				
			||||||
    "type": "git",
 | 
					    "type": "git",
 | 
				
			||||||
@ -38,17 +38,21 @@
 | 
				
			|||||||
  },
 | 
					  },
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
    "@types/csv-parse": "^1.2.2",
 | 
					    "@types/csv-parse": "^1.2.2",
 | 
				
			||||||
    "@types/jest": "^26.0.23",
 | 
					    "@types/node": "^16.11.26",
 | 
				
			||||||
    "@types/node": "^14.17.4",
 | 
					    "@types/semver": "^7.3.9",
 | 
				
			||||||
    "@types/tmp": "^0.2.0",
 | 
					    "@types/tmp": "^0.2.3",
 | 
				
			||||||
    "@vercel/ncc": "^0.28.6",
 | 
					    "@typescript-eslint/eslint-plugin": "^5.14.0",
 | 
				
			||||||
    "dotenv": "^8.6.0",
 | 
					    "@typescript-eslint/parser": "^5.14.0",
 | 
				
			||||||
    "jest": "^26.6.3",
 | 
					    "@vercel/ncc": "^0.33.3",
 | 
				
			||||||
    "jest-circus": "^26.6.3",
 | 
					    "dotenv": "^16.0.0",
 | 
				
			||||||
    "jest-runtime": "^26.6.3",
 | 
					    "eslint": "^8.11.0",
 | 
				
			||||||
 | 
					    "eslint-config-prettier": "^8.5.0",
 | 
				
			||||||
 | 
					    "eslint-plugin-jest": "^26.1.1",
 | 
				
			||||||
 | 
					    "eslint-plugin-prettier": "^4.0.0",
 | 
				
			||||||
 | 
					    "jest": "^27.2.5",
 | 
				
			||||||
    "prettier": "^2.3.1",
 | 
					    "prettier": "^2.3.1",
 | 
				
			||||||
    "ts-jest": "^26.5.6",
 | 
					    "ts-jest": "^27.1.2",
 | 
				
			||||||
    "typescript": "^4.3.4",
 | 
					    "ts-node": "^10.7.0",
 | 
				
			||||||
    "typescript-formatter": "^7.2.2"
 | 
					    "typescript": "^4.4.4"
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -76,8 +76,8 @@ export async function getSecret(kvp: string, file: boolean): Promise<string> {
 | 
				
			|||||||
  return `id=${key},src=${secretFile}`;
 | 
					  return `id=${key},src=${secretFile}`;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function isLocalOrTarExporter(outputs: string[]): Boolean {
 | 
					export function isLocalOrTarExporter(outputs: string[]): boolean {
 | 
				
			||||||
  for (let output of csvparse(outputs.join(`\n`), {
 | 
					  for (const output of csvparse(outputs.join(`\n`), {
 | 
				
			||||||
    delimiter: ',',
 | 
					    delimiter: ',',
 | 
				
			||||||
    trim: true,
 | 
					    trim: true,
 | 
				
			||||||
    columns: false,
 | 
					    columns: false,
 | 
				
			||||||
@ -88,7 +88,7 @@ export function isLocalOrTarExporter(outputs: string[]): Boolean {
 | 
				
			|||||||
    if (output.length == 1 && !output[0].startsWith('type=')) {
 | 
					    if (output.length == 1 && !output[0].startsWith('type=')) {
 | 
				
			||||||
      return true;
 | 
					      return true;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    for (let [key, value] of output.map(chunk => chunk.split('=').map(item => item.trim()))) {
 | 
					    for (const [key, value] of output.map(chunk => chunk.split('=').map(item => item.trim()))) {
 | 
				
			||||||
      if (key == 'type' && (value == 'local' || value == 'tar')) {
 | 
					      if (key == 'type' && (value == 'local' || value == 'tar')) {
 | 
				
			||||||
        return true;
 | 
					        return true;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
@ -97,8 +97,8 @@ export function isLocalOrTarExporter(outputs: string[]): Boolean {
 | 
				
			|||||||
  return false;
 | 
					  return false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function hasGitAuthToken(secrets: string[]): Boolean {
 | 
					export function hasGitAuthToken(secrets: string[]): boolean {
 | 
				
			||||||
  for (let secret of secrets) {
 | 
					  for (const secret of secrets) {
 | 
				
			||||||
    if (secret.startsWith('GIT_AUTH_TOKEN=')) {
 | 
					    if (secret.startsWith('GIT_AUTH_TOKEN=')) {
 | 
				
			||||||
      return true;
 | 
					      return true;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -106,7 +106,7 @@ export function hasGitAuthToken(secrets: string[]): Boolean {
 | 
				
			|||||||
  return false;
 | 
					  return false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export async function isAvailable(): Promise<Boolean> {
 | 
					export async function isAvailable(): Promise<boolean> {
 | 
				
			||||||
  return await exec
 | 
					  return await exec
 | 
				
			||||||
    .getExecOutput('docker', ['buildx'], {
 | 
					    .getExecOutput('docker', ['buildx'], {
 | 
				
			||||||
      ignoreReturnCode: true,
 | 
					      ignoreReturnCode: true,
 | 
				
			||||||
 | 
				
			|||||||
@ -99,15 +99,17 @@ export async function getInputs(defaultContext: string): Promise<Inputs> {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export async function getArgs(inputs: Inputs, defaultContext: string, buildxVersion: string): Promise<Array<string>> {
 | 
					export async function getArgs(inputs: Inputs, defaultContext: string, buildxVersion: string): Promise<Array<string>> {
 | 
				
			||||||
  let args: Array<string> = ['buildx'];
 | 
					  // prettier-ignore
 | 
				
			||||||
  args.push.apply(args, await getBuildArgs(inputs, defaultContext, buildxVersion));
 | 
					  return [
 | 
				
			||||||
  args.push.apply(args, await getCommonArgs(inputs, buildxVersion));
 | 
					    'buildx',
 | 
				
			||||||
  args.push(handlebars.compile(inputs.context)({defaultContext}));
 | 
					    ...await getBuildArgs(inputs, defaultContext, buildxVersion),
 | 
				
			||||||
  return args;
 | 
					    ...await getCommonArgs(inputs, buildxVersion),
 | 
				
			||||||
 | 
					    handlebars.compile(inputs.context)({defaultContext})
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
async function getBuildArgs(inputs: Inputs, defaultContext: string, buildxVersion: string): Promise<Array<string>> {
 | 
					async function getBuildArgs(inputs: Inputs, defaultContext: string, buildxVersion: string): Promise<Array<string>> {
 | 
				
			||||||
  let args: Array<string> = ['build'];
 | 
					  const args: Array<string> = ['build'];
 | 
				
			||||||
  await asyncForEach(inputs.addHosts, async addHost => {
 | 
					  await asyncForEach(inputs.addHosts, async addHost => {
 | 
				
			||||||
    args.push('--add-host', addHost);
 | 
					    args.push('--add-host', addHost);
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
@ -182,7 +184,7 @@ async function getBuildArgs(inputs: Inputs, defaultContext: string, buildxVersio
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
async function getCommonArgs(inputs: Inputs, buildxVersion: string): Promise<Array<string>> {
 | 
					async function getCommonArgs(inputs: Inputs, buildxVersion: string): Promise<Array<string>> {
 | 
				
			||||||
  let args: Array<string> = [];
 | 
					  const args: Array<string> = [];
 | 
				
			||||||
  if (inputs.builder) {
 | 
					  if (inputs.builder) {
 | 
				
			||||||
    args.push('--builder', inputs.builder);
 | 
					    args.push('--builder', inputs.builder);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
@ -208,14 +210,14 @@ async function getCommonArgs(inputs: Inputs, buildxVersion: string): Promise<Arr
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export async function getInputList(name: string, ignoreComma?: boolean): Promise<string[]> {
 | 
					export async function getInputList(name: string, ignoreComma?: boolean): Promise<string[]> {
 | 
				
			||||||
  let res: Array<string> = [];
 | 
					  const res: Array<string> = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const items = core.getInput(name);
 | 
					  const items = core.getInput(name);
 | 
				
			||||||
  if (items == '') {
 | 
					  if (items == '') {
 | 
				
			||||||
    return res;
 | 
					    return res;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  for (let output of (await csvparse(items, {
 | 
					  for (const output of (await csvparse(items, {
 | 
				
			||||||
    columns: false,
 | 
					    columns: false,
 | 
				
			||||||
    relax: true,
 | 
					    relax: true,
 | 
				
			||||||
    relaxColumnCount: true,
 | 
					    relaxColumnCount: true,
 | 
				
			||||||
@ -241,6 +243,6 @@ export const asyncForEach = async (array, callback) => {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// FIXME: Temp fix https://github.com/actions/toolkit/issues/777
 | 
					// FIXME: Temp fix https://github.com/actions/toolkit/issues/777
 | 
				
			||||||
export function setOutput(name: string, value: any): void {
 | 
					export function setOutput(name: string, value: unknown): void {
 | 
				
			||||||
  issueCommand('set-output', {name}, value);
 | 
					  issueCommand('set-output', {name}, value);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ async function run(): Promise<void> {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    const buildxVersion = await buildx.getVersion();
 | 
					    const buildxVersion = await buildx.getVersion();
 | 
				
			||||||
    const defContext = context.defaultContext();
 | 
					    const defContext = context.defaultContext();
 | 
				
			||||||
    let inputs: context.Inputs = await context.getInputs(defContext);
 | 
					    const inputs: context.Inputs = await context.getInputs(defContext);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const args: string[] = await context.getArgs(inputs, defContext, buildxVersion);
 | 
					    const args: string[] = await context.getArgs(inputs, defContext, buildxVersion);
 | 
				
			||||||
    await exec
 | 
					    await exec
 | 
				
			||||||
@ -29,7 +29,7 @@ async function run(): Promise<void> {
 | 
				
			|||||||
      })
 | 
					      })
 | 
				
			||||||
      .then(res => {
 | 
					      .then(res => {
 | 
				
			||||||
        if (res.stderr.length > 0 && res.exitCode != 0) {
 | 
					        if (res.stderr.length > 0 && res.exitCode != 0) {
 | 
				
			||||||
          throw new Error(`buildx failed with: ${res.stderr.match(/(.*)\s*$/)![0].trim()}`);
 | 
					          throw new Error(`buildx failed with: ${res.stderr.match(/(.*)\s*$/)?.[0]?.trim() ?? 'unknown error'}`);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      });
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -2,20 +2,18 @@
 | 
				
			|||||||
  "compilerOptions": {
 | 
					  "compilerOptions": {
 | 
				
			||||||
    "target": "es6",
 | 
					    "target": "es6",
 | 
				
			||||||
    "module": "commonjs",
 | 
					    "module": "commonjs",
 | 
				
			||||||
    "lib": [
 | 
					 | 
				
			||||||
      "es6",
 | 
					 | 
				
			||||||
      "dom"
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    "newLine": "lf",
 | 
					    "newLine": "lf",
 | 
				
			||||||
    "outDir": "./lib",
 | 
					    "outDir": "./lib",
 | 
				
			||||||
    "rootDir": "./src",
 | 
					    "rootDir": "./src",
 | 
				
			||||||
 | 
					    "esModuleInterop": true,
 | 
				
			||||||
 | 
					    "forceConsistentCasingInFileNames": true,
 | 
				
			||||||
    "strict": true,
 | 
					    "strict": true,
 | 
				
			||||||
    "noImplicitAny": false,
 | 
					    "noImplicitAny": false,
 | 
				
			||||||
    "esModuleInterop": true,
 | 
					    "useUnknownInCatchVariables": false,
 | 
				
			||||||
    "sourceMap": true
 | 
					 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "exclude": [
 | 
					  "exclude": [
 | 
				
			||||||
    "node_modules",
 | 
					    "node_modules",
 | 
				
			||||||
    "**/*.test.ts"
 | 
					    "**/*.test.ts",
 | 
				
			||||||
 | 
					    "jest.config.ts"
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user