diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..0c3854e --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,66 @@ +name: build + +on: + pull_request: + types: [opened, reopened, synchronize] + push: + branches: + - main + workflow_dispatch: + inputs: + push: + description: Push to Docker hub after build is complete. + default: true + type: boolean + services: + description: Space delimited string of services to build. If empty, all will be built. + type: string + schedule: + - cron: '0 0 * * 6' + +env: + TASK_VERSION: v3.29.1 + TASK_CHECKSUM: e411770abf73d5e094100ab7a1c8278f35b591ecadbfd778200b6b2ad1ee340b + # If this changes, also update the if on the docs job. We unfortunately can't + # use env.PUSH in the if there. + PUSH: ${{ (inputs.push || github.event_name == 'schedule' || github.event_name == 'push') && 'true' || 'false' }} + +jobs: + build: + name: Build + runs-on: ubuntu-latest + strategy: + matrix: ${{ fromJSON(needs.matrix.outputs.matrix) }} + fail-fast: false + steps: + - uses: actions/checkout@v3 + - name: Install dependencies + run: sudo apt-get update + && sudo apt-get install -y eatmydata + && sudo ln -snf /usr/bin/eatmydata /usr/local/bin/apt-get + && sudo apt-get install -y curl + && curl -L -o /tmp/task_linux_amd64.deb https://github.com/go-task/task/releases/download/${{ env.TASK_VERSION }}/task_linux_amd64.deb + && sha256sum /tmp/task_linux_amd64.deb | grep -q ${{ env.TASK_CHECKSUM }} + && sudo dpkg -i /tmp/task_linux_amd64.deb + && sudo apt-get clean + && sudo rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + - + # Add support for more platforms with QEMU (optional) + # https://github.com/docker/setup-qemu-action + name: Set up QEMU + uses: docker/setup-qemu-action@v2 + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - + # Expose the actions cache url and token. + # https://github.com/tonistiigi/go-actions-cache/blob/master/api.md#authentication + name: Expose GitHub Runtime + uses: crazy-max/ghaction-github-runtime@v2 + - run: task + id: task diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..b58b603 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,5 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/docker-zfs-utils.iml b/.idea/docker-zfs-utils.iml new file mode 100644 index 0000000..24643cc --- /dev/null +++ b/.idea/docker-zfs-utils.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..0101aa4 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..0c2361d --- /dev/null +++ b/Dockerfile @@ -0,0 +1,8 @@ +ARG FROM_TAG + +FROM debian:$FROM_TAG + +RUN \ + sed -e 's/^Components: main$/& contrib/g' -i /etc/apt/sources.list.d/debian.sources && \ + apt-get update && \ + apt-get install --yes --no-install-recommends zfsutils-linux diff --git a/README.md b/README.md new file mode 100644 index 0000000..6a03352 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +This is a very simple docker image starting from Debian slim with just +zfsutils-linux package installed. \ No newline at end of file diff --git a/Taskfile.yml b/Taskfile.yml new file mode 100644 index 0000000..dc604f3 --- /dev/null +++ b/Taskfile.yml @@ -0,0 +1,85 @@ +# yaml-language-server: $schema=https://taskfile.dev/schema.json +version: 3 + +dotenv: + - .env.local + - .local.env + - .env + +env: + NAMESPACE: tugboat + IMAGE_NAME: zfs-utils + # Separate each platform with a comma. + PLATFORMS: linux/amd64,linux/arm64 + # Separate each tag with a comma. + TAGS: latest,bookworm-slim + FROM_TAG: bookworm-slim + +vars: + BUILDX_BUILDER: + sh: echo "{{.NAMESPACE}}-{{.IMAGE_NAME}}" + IMAGE_TAGS: + sh: echo "{{.TAGS}}" | sed -E 's@(^|,)([^,]+)@ --tag {{.NAMESPACE}}/{{.IMAGE_NAME}}:\2@g' + +tasks: + default: + desc: 'Builds the image. Set PUSH=1 to push after building.' + cmds: + - task: create-builder + - task: build + + create-builder: + desc: '[subtask] Create the Docker buildx builder.' + status: + # Exits zero (up to date) if there is already a builder. + - docker buildx ls | grep -q '^{{.BUILDX_BUILDER}}\s' + cmds: + - docker buildx create + --name "{{.BUILDX_BUILDER}}" + --platform "{{.PLATFORMS}}" + --bootstrap + --use + + build: + desc: '[subtask] Build any docker image tarballs generated from bake for Tugboat usage.' + vars: + PUSH_OPT: + sh: (test "$PUSH" != "true" && test "$PUSH" != "1") || echo "--push" + cmds: + - docker buildx use "{{.BUILDX_BUILDER}}" + - echo 'PUSH_OPT {{.PUSH_OPT}}' + - docker buildx build + --build-arg FROM_TAG={{.FROM_TAG}} + --platform "{{.PLATFORMS}}" + {{.IMAGE_TAGS}} {{.PUSH_OPT}} . + + clean: + desc: 'Removes all generated files and docker images.' + prompt: This will remove any generated files and delete all docker images in + the {{.NAMESPACE}}/* namespace. Do you want to continue? + deps: + - rm-images + + clean-all: + desc: 'Removes the buildkit builder, all generated files, and all docker images.' + deps: + - rm-builder + - rm-images + prompt: This will remove the buildkit builder, all generated files, and + delete all docker images in the {{.NAMESPACE}}/* namespace. Do you + want to continue? + + rm-builder: + internal: true + status: + - if docker buildx ls | grep -q '^{{.BUILDX_BUILDER}}\s'; then exit 1; fi + cmd: docker buildx rm -f '{{.BUILDX_BUILDER}}' + rm-images: + internal: true + status: + - test -z "{{.IMAGES}}" + vars: + IMAGES: + sh: docker images ls --filter=reference="{{.NAMESPACE}}/{{.IMAGE_NAME}}" -q | sort | uniq + cmd: docker rmi --force $(echo "{{.IMAGES}}") || true +