From cb02c5f3d1805a59bf5709b14f979180978a3c8c Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Fri, 2 Apr 2021 01:19:14 +0200 Subject: [PATCH] Enhance workflow Signed-off-by: CrazyMax --- .dockerignore | 2 + .github/CONTRIBUTING.md | 33 +++++---------- .github/ISSUE_TEMPLATE/bug_report.md | 3 +- .github/setup-buildx-action.png | Bin 4607 -> 5172 bytes .github/workflows/ci.yml | 16 +++---- .github/workflows/test.yml | 36 ++++++---------- Dockerfile | 52 ----------------------- dist/index.js | 18 ++++---- docker-bake.hcl | 61 +++++++++++++++++++-------- hack/build.Dockerfile | 42 ++++++++++++++++++ hack/shell | 6 --- hack/test.Dockerfile | 23 ++++++++++ hack/vendor.Dockerfile | 23 ++++++++++ src/buildx.ts | 6 +-- src/main.ts | 12 +++--- 15 files changed, 184 insertions(+), 149 deletions(-) create mode 100644 .dockerignore delete mode 100644 Dockerfile create mode 100644 hack/build.Dockerfile delete mode 100755 hack/shell create mode 100644 hack/test.Dockerfile create mode 100644 hack/vendor.Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..ccc2930 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +/coverage +/node_modules diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 51231bf..37dca54 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -2,35 +2,24 @@ 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 1. [Fork](https://github.com/docker/setup-buildx-action/fork) and clone the repository 2. Configure and install the dependencies: `yarn install` 3. Create a new branch: `git checkout -b my-branch-name` -4. Make your change, add tests, and make sure the tests still pass -5. Run pre-checkin: `yarn run pre-checkin` -6. Push to your fork and [submit a pull request](https://github.com/docker/setup-buildx-action/compare) -7. Pat yourself 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 -``` +4. Make your changes +5. Make sure the tests pass: `docker buildx bake test` +6. Format code and build javascript artifacts: `docker buildx bake pre-checkin` +7. Validate all code has correctly formatted and built: `docker buildx bake validate` +8. Push to your fork and [submit a pull request](https://github.com/docker/setup-buildx-action/compare) +9. Pat your self on the back and wait for your pull request to be reviewed and merged. Here are a few things you can do that will increase the likelihood of your pull request being accepted: +- Write tests. - Make sure the `README.md` and any other relevant **documentation are kept up-to-date**. - We try to follow [SemVer v2.0.0](https://semver.org/). Randomly breaking public APIs is not an option. - Keep your change as focused as possible. If there are multiple changes you would like to make that are not dependent upon each other, consider submitting them as **separate pull requests**. @@ -39,5 +28,5 @@ Here are a few things you can do that will increase the likelihood of your pull ## Resources - [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/) -- [Using Pull Requests](https://help.github.com/articles/about-pull-requests/) -- [GitHub Help](https://help.github.com) +- [Using Pull Requests](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests) +- [GitHub Help](https://docs.github.com/en) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 1c2136d..d50d109 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -30,4 +30,5 @@ about: Create a report to help us improve ### 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. diff --git a/.github/setup-buildx-action.png b/.github/setup-buildx-action.png index 86fe6d398ef80401094d23d4db1c314d681fa01d..72fbeda9869cb5331ee45966234b320a5e03b11f 100644 GIT binary patch literal 5172 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 CQ_YnC diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c1baf1f..ac756a2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,18 +1,18 @@ name: ci on: + schedule: + - cron: '0 10 * * *' # everyday at 10am push: branches: - - master - - releases/v* - paths-ignore: - - "**.md" + - 'master' + - 'releases/v*' + tags: + - 'v*' pull_request: branches: - - master - - releases/v* - paths-ignore: - - "**.md" + - 'master' + - 'releases/v*' jobs: main: diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 54e6851..93790e9 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -3,28 +3,14 @@ name: test on: push: branches: - - master - - releases/v* - paths-ignore: - - "**.md" + - 'master' + - 'releases/v*' pull_request: - paths-ignore: - - "**.md" + branches: + - 'master' + - 'releases/v*' jobs: - test-containerized: - runs-on: ubuntu-latest - steps: - - - name: Checkout - uses: actions/checkout@v2 - - - name: Validate - run: docker buildx bake validate - - - name: Test - run: docker buildx bake test - test: runs-on: ubuntu-latest steps: @@ -32,15 +18,17 @@ jobs: name: Checkout uses: actions/checkout@v2 - - name: Install - run: yarn install + name: Validate + uses: docker/bake-action@v1 + with: + targets: validate - name: Test - run: yarn run test + uses: docker/bake-action@v1 + with: + targets: test - name: Upload coverage uses: codecov/codecov-action@v1 - if: success() with: - token: ${{ secrets.CODECOV_TOKEN }} file: ./coverage/clover.xml diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index dba2525..0000000 --- a/Dockerfile +++ /dev/null @@ -1,52 +0,0 @@ -#syntax=docker/dockerfile:1.2 - -FROM node:14 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"] diff --git a/dist/index.js b/dist/index.js index 8263f37..e50e40c 100644 --- a/dist/index.js +++ b/dist/index.js @@ -528,17 +528,17 @@ function run() { const inputs = yield context.getInputs(); const dockerConfigHome = process.env.DOCKER_CONFIG || path.join(os.homedir(), '.docker'); if (!(yield buildx.isAvailable()) || inputs.version) { - core.startGroup(`👉 Installing Buildx`); + core.startGroup(`Installing buildx`); yield buildx.install(inputs.version || 'latest', dockerConfigHome); core.endGroup(); } const buildxVersion = yield buildx.getVersion(); - core.info(`📣 Buildx version: ${buildxVersion}`); + core.info(`Using buildx ${buildxVersion}`); const builderName = inputs.driver == 'docker' ? 'default' : `builder-${__webpack_require__(840).v4()}`; core.setOutput('name', builderName); stateHelper.setBuilderName(builderName); if (inputs.driver !== 'docker') { - core.startGroup(`🔨 Creating a new builder instance`); + core.startGroup(`Creating a new builder instance`); let createArgs = ['buildx', 'create', '--name', builderName, '--driver', inputs.driver]; if (semver.satisfies(buildxVersion, '>=0.3.0')) { yield context.asyncForEach(inputs.driverOpts, (driverOpt) => __awaiter(this, void 0, void 0, function* () { @@ -556,7 +556,7 @@ function run() { } yield exec.exec('docker', createArgs); core.endGroup(); - core.startGroup(`🏃 Booting builder`); + core.startGroup(`Booting builder`); let bootstrapArgs = ['buildx', 'inspect', '--bootstrap']; if (semver.satisfies(buildxVersion, '>=0.4.0')) { bootstrapArgs.push('--builder', builderName); @@ -565,11 +565,11 @@ function run() { core.endGroup(); } if (inputs.install) { - core.startGroup(`🤝 Setting buildx as default builder`); + core.startGroup(`Setting buildx as default builder`); yield exec.exec('docker', ['buildx', 'install']); core.endGroup(); } - core.startGroup(`🛒 Extracting available platforms`); + core.startGroup(`Extracting available platforms`); const platforms = yield buildx.platforms(); core.info(`${platforms}`); core.setOutput('platforms', platforms); @@ -2185,7 +2185,7 @@ function install(inputVersion, dockerConfigHome) { if (!release) { throw new Error(`Cannot find buildx ${inputVersion} release`); } - core.debug(`Release found: ${release.tag_name}`); + core.debug(`Release ${release.tag_name} found`); const version = release.tag_name.replace(/^v+|v+$/g, ''); let toolPath; toolPath = tc.find('buildx', version); @@ -2205,7 +2205,7 @@ function install(inputVersion, dockerConfigHome) { const pluginPath = path.join(pluginsDir, filename); core.debug(`Plugin path is ${pluginPath}`); fs.copyFileSync(path.join(toolPath, filename), pluginPath); - core.info('🔨 Fixing perms...'); + core.info('Fixing perms'); fs.chmodSync(pluginPath, '0755'); return pluginPath; }); @@ -2217,7 +2217,7 @@ function download(version) { const downloadUrl = util.format('https://github.com/docker/buildx/releases/download/v%s/%s', version, yield filename(version)); let downloadPath; try { - core.info(`⬇️ Downloading ${downloadUrl}...`); + core.info(`Downloading ${downloadUrl}`); downloadPath = yield tc.downloadTool(downloadUrl); core.debug(`Downloaded to ${downloadPath}`); } diff --git a/docker-bake.hcl b/docker-bake.hcl index f7f1745..7054cf7 100644 --- a/docker-bake.hcl +++ b/docker-bake.hcl @@ -1,42 +1,67 @@ +variable "NODE_VERSION" { + default = "12" +} + +target "node-version" { + args = { + NODE_VERSION = NODE_VERSION + } +} + group "default" { targets = ["build"] } group "pre-checkin" { - targets = ["update-yarn", "format", "build"] + targets = ["vendor-update", "format", "build"] } group "validate" { - targets = ["validate-format", "validate-build", "validate-yarn"] -} - -target "update-yarn" { - target = "update-yarn" - output = ["."] + targets = ["format-validate", "build-validate", "vendor-validate"] } target "build" { - target = "dist" + inherits = ["node-version"] + dockerfile = "./hack/build.Dockerfile" + target = "build-update" output = ["."] } -target "test" { - target = "test" +target "build-validate" { + inherits = ["node-version"] + dockerfile = "./hack/build.Dockerfile" + target = "build-validate" } target "format" { - target = "format" + inherits = ["node-version"] + dockerfile = "./hack/build.Dockerfile" + target = "format-update" output = ["."] } -target "validate-format" { - target = "validate-format" +target "format-validate" { + inherits = ["node-version"] + dockerfile = "./hack/build.Dockerfile" + target = "format-validate" } -target "validate-build" { - target = "validate-build" +target "vendor-update" { + inherits = ["node-version"] + dockerfile = "./hack/vendor.Dockerfile" + target = "update" + output = ["."] } -target "validate-yarn" { - target = "validate-yarn" -} \ No newline at end of file +target "vendor-validate" { + inherits = ["node-version"] + dockerfile = "./hack/vendor.Dockerfile" + target = "validate" +} + +target "test" { + inherits = ["node-version"] + dockerfile = "./hack/test.Dockerfile" + target = "test-coverage" + output = ["./coverage"] +} diff --git a/hack/build.Dockerfile b/hack/build.Dockerfile new file mode 100644 index 0000000..a0796d7 --- /dev/null +++ b/hack/build.Dockerfile @@ -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 \ diff --git a/hack/shell b/hack/shell deleted file mode 100755 index 97b23ea..0000000 --- a/hack/shell +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash - -iidfile=$(mktemp -t docker-iidfile.XXXXXXXXXX) -DOCKER_BUILDKIT=1 docker build --iidfile $iidfile --progress=plain . -docker run -it --rm $(cat $iidfile) -docker rmi $(cat $iidfile) diff --git a/hack/test.Dockerfile b/hack/test.Dockerfile new file mode 100644 index 0000000..6a6c5d6 --- /dev/null +++ b/hack/test.Dockerfile @@ -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 deps +RUN --mount=type=bind,target=.,rw \ + --mount=type=cache,target=/src/node_modules \ + yarn install + +FROM deps AS test +ENV RUNNER_TEMP=/tmp/github_runner +ENV RUNNER_TOOL_CACHE=/tmp/github_tool_cache +RUN --mount=type=bind,target=.,rw \ + --mount=type=cache,target=/src/node_modules \ + --mount=type=bind,from=crazymax/docker,source=/usr/libexec/docker/cli-plugins/docker-buildx,target=/usr/libexec/docker/cli-plugins/docker-buildx \ + --mount=type=bind,from=crazymax/docker,source=/usr/local/bin/docker,target=/usr/bin/docker \ + yarn run test --coverageDirectory=/tmp/coverage + +FROM scratch AS test-coverage +COPY --from=test /tmp/coverage / diff --git a/hack/vendor.Dockerfile b/hack/vendor.Dockerfile new file mode 100644 index 0000000..dd7906b --- /dev/null +++ b/hack/vendor.Dockerfile @@ -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 diff --git a/src/buildx.ts b/src/buildx.ts index 912cbf0..e1ee9f3 100644 --- a/src/buildx.ts +++ b/src/buildx.ts @@ -52,7 +52,7 @@ export async function install(inputVersion: string, dockerConfigHome: string): P if (!release) { throw new Error(`Cannot find buildx ${inputVersion} release`); } - core.debug(`Release found: ${release.tag_name}`); + core.debug(`Release ${release.tag_name} found`); const version = release.tag_name.replace(/^v+|v+$/g, ''); let toolPath: string; @@ -76,7 +76,7 @@ export async function install(inputVersion: string, dockerConfigHome: string): P core.debug(`Plugin path is ${pluginPath}`); fs.copyFileSync(path.join(toolPath, filename), pluginPath); - core.info('🔨 Fixing perms...'); + core.info('Fixing perms'); fs.chmodSync(pluginPath, '0755'); return pluginPath; @@ -92,7 +92,7 @@ async function download(version: string): Promise { let downloadPath: string; try { - core.info(`⬇️ Downloading ${downloadUrl}...`); + core.info(`Downloading ${downloadUrl}`); downloadPath = await tc.downloadTool(downloadUrl); core.debug(`Downloaded to ${downloadPath}`); } catch (error) { diff --git a/src/main.ts b/src/main.ts index d5eb526..560524c 100644 --- a/src/main.ts +++ b/src/main.ts @@ -19,20 +19,20 @@ async function run(): Promise { const dockerConfigHome: string = process.env.DOCKER_CONFIG || path.join(os.homedir(), '.docker'); if (!(await buildx.isAvailable()) || inputs.version) { - core.startGroup(`👉 Installing Buildx`); + core.startGroup(`Installing buildx`); await buildx.install(inputs.version || 'latest', dockerConfigHome); core.endGroup(); } const buildxVersion = await buildx.getVersion(); - core.info(`📣 Buildx version: ${buildxVersion}`); + core.info(`Using buildx ${buildxVersion}`); const builderName: string = inputs.driver == 'docker' ? 'default' : `builder-${require('uuid').v4()}`; core.setOutput('name', builderName); stateHelper.setBuilderName(builderName); if (inputs.driver !== 'docker') { - core.startGroup(`🔨 Creating a new builder instance`); + core.startGroup(`Creating a new builder instance`); let createArgs: Array = ['buildx', 'create', '--name', builderName, '--driver', inputs.driver]; if (semver.satisfies(buildxVersion, '>=0.3.0')) { await context.asyncForEach(inputs.driverOpts, async driverOpt => { @@ -51,7 +51,7 @@ async function run(): Promise { await exec.exec('docker', createArgs); core.endGroup(); - core.startGroup(`🏃 Booting builder`); + core.startGroup(`Booting builder`); let bootstrapArgs: Array = ['buildx', 'inspect', '--bootstrap']; if (semver.satisfies(buildxVersion, '>=0.4.0')) { bootstrapArgs.push('--builder', builderName); @@ -61,12 +61,12 @@ async function run(): Promise { } if (inputs.install) { - core.startGroup(`🤝 Setting buildx as default builder`); + core.startGroup(`Setting buildx as default builder`); await exec.exec('docker', ['buildx', 'install']); core.endGroup(); } - core.startGroup(`🛒 Extracting available platforms`); + core.startGroup(`Extracting available platforms`); const platforms = await buildx.platforms(); core.info(`${platforms}`); core.setOutput('platforms', platforms);