From ba83ee9cac975da0fd908fc725ef98e53e5e3536 Mon Sep 17 00:00:00 2001 From: Thomas Lauf Date: Sat, 12 Aug 2023 11:30:39 +0200 Subject: [PATCH] Add workflow for Taskwarrior Docker image (#3039) The workflow is triggered by a successful run of the test suite and creates a Docker image with a Taskwarrior installation of the current branch (restricted to develop/stable) --- .github/workflows/docker-image.yaml | 53 +++++++++++++++++++++++++++++ docker/task.dockerfile | 42 +++++++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 .github/workflows/docker-image.yaml create mode 100644 docker/task.dockerfile diff --git a/.github/workflows/docker-image.yaml b/.github/workflows/docker-image.yaml new file mode 100644 index 000000000..ecb3be42e --- /dev/null +++ b/.github/workflows/docker-image.yaml @@ -0,0 +1,53 @@ +name: Taskwarrior Docker image + +on: + workflow_dispatch: + workflow_run: + workflows: [tests] + branches: + - develop + - stable + types: + - completed + +env: + REGISTRY: "ghcr.io" + +jobs: + build-and-push-docker-image: + runs-on: ubuntu-latest + if: ${{ github.event.workflow_run.conclusion == 'success' }} + permissions: + contents: read + packages: write + id-token: write + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + with: + submodules: "recursive" + + - name: Install cosign + uses: sigstore/cosign-installer@v2.8.1 + + - name: Log into registry ${{ env.REGISTRY }} + uses: docker/login-action@v2.1.0 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push Taskwarrior Docker image + id: build-and-push + uses: docker/build-push-action@v3.2.0 + with: + context: . + file: "./docker/task.dockerfile" + push: true + tags: ${{ env.REGISTRY }}/${{ github.actor }}/task:${{ github.ref_name }} + + - name: Sign the published Docker image + env: + COSIGN_EXPERIMENTAL: "true" + run: cosign sign ${{ env.REGISTRY }}/${{ github.actor }}/task@${{ steps.build-and-push.outputs.digest }} diff --git a/docker/task.dockerfile b/docker/task.dockerfile new file mode 100644 index 000000000..de7601caf --- /dev/null +++ b/docker/task.dockerfile @@ -0,0 +1,42 @@ +FROM ubuntu:22.04 AS base + +FROM base AS builder + +ENV DEBIAN_FRONTEND noninteractive + +RUN apt-get update && \ + apt-get install -y \ + build-essential \ + cmake \ + curl \ + git \ + libgnutls28-dev \ + uuid-dev + +# Setup language environment +ENV LC_ALL en_US.UTF-8 +ENV LANG en_US.UTF-8 +ENV LANGUAGE en_US.UTF-8 + +# Add source directory +ADD .. /root/code/ +WORKDIR /root/code/ + +# Setup Rust +RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup.sh && \ + sh rustup.sh -y --profile minimal --default-toolchain stable --component rust-docs + +# Build Taskwarrior +RUN git clean -dfx && \ + git submodule init && \ + git submodule update && \ + cmake -DCMAKE_BUILD_TYPE=release . && \ + make -j8 + +FROM base AS runner + +# Install Taskwarrior +COPY --from=builder /root/code/src/task /usr/local/bin + +# Initialize Taskwarrior +RUN ( echo "yes" | task ) || true