Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enhance workflow #104

Merged
merged 1 commit into from Mar 28, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 1 addition & 3 deletions .dockerignore
@@ -1,4 +1,2 @@
/.dev
/dist
/lib
/coverage
/node_modules
7 changes: 4 additions & 3 deletions .github/CONTRIBUTING.md
Expand Up @@ -2,7 +2,8 @@

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

Expand All @@ -25,5 +26,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)
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.md
Expand Up @@ -30,4 +30,4 @@ 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.
1 change: 1 addition & 0 deletions .github/workflows/ci.yml
Expand Up @@ -10,6 +10,7 @@ on:
pull_request:
branches:
- 'master'
- 'releases/v*'

jobs:
ci:
Expand Down
38 changes: 19 additions & 19 deletions .github/workflows/docker.yml → .github/workflows/image.yml
@@ -1,16 +1,18 @@
name: docker
name: image

on:
push:
branches:
- 'master'
- 'releases/v*'
tags:
- '*'
paths-ignore:
- '**.md'
pull_request:
branches:
- 'master'
- 'releases/v*'
paths-ignore:
- '**.md'

Expand All @@ -27,18 +29,24 @@ jobs:
uses: actions/checkout@v2
-
name: Docker meta
id: docker_meta
id: meta
uses: crazy-max/ghaction-docker-meta@v1
with:
images: |
${{ env.DOCKERHUB_SLUG }}
${{ env.GHCR_SLUG }}
tag-edge: true
label-custom: |
org.opencontainers.image.title=Chocolatey Action
org.opencontainers.image.description=GitHub Action for Chocolatey, the package manager for Windows
org.opencontainers.image.vendor=CrazyMax
com.github.actions.name=Chocolatey Action
com.github.actions.description=GitHub Action for Chocolatey, the package manager for Windows
com.github.actions.icon=terminal
com.github.actions.color=blue
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
with:
buildkitd-flags: "--debug"
-
name: Login to DockerHub
if: github.event_name != 'pull_request'
Expand All @@ -52,22 +60,14 @@ jobs:
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ secrets.GHCR_USERNAME }}
password: ${{ secrets.GHCR_TOKEN }}
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
-
name: Build
uses: docker/build-push-action@v2
uses: docker/bake-action@v1
with:
context: .
file: ./Dockerfile
files: |
./docker-bake.hcl
${{ steps.meta.outputs.bake-file }}
targets: image
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.docker_meta.outputs.tags }}
labels: |
${{ steps.docker_meta.outputs.labels }}
org.opencontainers.image.title=Chocolatey Action
org.opencontainers.image.description=GitHub Action for Chocolatey, the package manager for Windows
org.opencontainers.image.vendor=CrazyMax
com.github.actions.name=Chocolatey Action
com.github.actions.description=GitHub Action for Chocolatey, the package manager for Windows
com.github.actions.icon=terminal
com.github.actions.color=blue
5 changes: 4 additions & 1 deletion .github/workflows/validate.yml
Expand Up @@ -10,6 +10,7 @@ on:
pull_request:
branches:
- 'master'
- 'releases/v*'
paths-ignore:
- '**.md'

Expand All @@ -22,4 +23,6 @@ jobs:
uses: actions/checkout@v2
-
name: Validate
run: docker buildx bake validate
uses: docker/bake-action@v1
with:
targets: validate
41 changes: 0 additions & 41 deletions dev.Dockerfile

This file was deleted.

81 changes: 58 additions & 23 deletions docker-bake.hcl
@@ -1,48 +1,83 @@
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"]
targets = ["format-validate", "build-validate", "vendor-validate"]
}

target "dockerfile" {
dockerfile = "dev.Dockerfile"
target "build" {
inherits = ["node-version"]
dockerfile = "./hack/build.Dockerfile"
target = "build-update"
output = ["."]
}

target "update-yarn" {
inherits = ["dockerfile"]
target = "update-yarn"
output = ["."]
target "build-validate" {
inherits = ["node-version"]
dockerfile = "./hack/build.Dockerfile"
target = "build-validate"
}

target "build" {
inherits = ["dockerfile"]
target = "dist"
target "format" {
inherits = ["node-version"]
dockerfile = "./hack/build.Dockerfile"
target = "format-update"
output = ["."]
}

target "format" {
inherits = ["dockerfile"]
target = "format"
target "format-validate" {
inherits = ["node-version"]
dockerfile = "./hack/build.Dockerfile"
target = "format-validate"
}

target "vendor-update" {
inherits = ["node-version"]
dockerfile = "./hack/vendor.Dockerfile"
target = "update"
output = ["."]
}

target "validate-format" {
inherits = ["dockerfile"]
target = "validate-format"
target "vendor-validate" {
inherits = ["node-version"]
dockerfile = "./hack/vendor.Dockerfile"
target = "validate"
}

#
#
#

variable "DEFAULT_TAG" {
default = "ghaction-chocolatey:local"
}

// Special target: https://github.com/crazy-max/ghaction-docker-meta#bake-definition
target "ghaction-docker-meta" {
tags = ["${DEFAULT_TAG}"]
}

target "validate-build" {
inherits = ["dockerfile"]
target = "validate-build"
target "image" {
inherits = ["ghaction-docker-meta"]
context = "./image"
}

target "validate-yarn" {
inherits = ["dockerfile"]
target = "validate-yarn"
target "image-local" {
inherits = ["image"]
output = ["type=docker"]
}
42 changes: 42 additions & 0 deletions 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 \
21 changes: 21 additions & 0 deletions hack/test.Dockerfile
@@ -0,0 +1,21 @@
# 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 \
yarn run test --coverageDirectory=/tmp/coverage

FROM scratch AS test-coverage
COPY --from=test /tmp/coverage /
23 changes: 23 additions & 0 deletions 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