From 1625e8b380b392f74a907541147bec51837872bb Mon Sep 17 00:00:00 2001 From: Michael Housh Date: Wed, 12 Nov 2025 12:16:16 -0500 Subject: [PATCH] feat: Updates readme, adds ci to build image when pushed. --- .gitea/workflows/ci.yaml | 63 ++++++++++++++++++++++++++++++++++++++++ Dockerfile | 36 ++++++++++++++++++++--- README.md | 40 ++++++++++++++++++++----- justfile | 5 ++++ 4 files changed, 132 insertions(+), 12 deletions(-) create mode 100644 .gitea/workflows/ci.yaml create mode 100644 justfile diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml new file mode 100644 index 0000000..47122a1 --- /dev/null +++ b/.gitea/workflows/ci.yaml @@ -0,0 +1,63 @@ +name: Create and publish a Docker image + +# Configures this workflow to run every time a change is pushed to the branch called `release`. +on: + push: + branches: ['main'] + workflow_dispatch: + +# Defines two custom environment variables for the workflow. These are used for the Container registry domain, +# and a name for the Docker image that this workflow builds. +env: + REGISTRY: git.housh.dev + IMAGE_NAME: swift-dev + +# There is a single job in this workflow. It's configured to run on the latest available version of Ubuntu. +jobs: + build-and-push-image: + runs-on: ubuntu-latest + # Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job. + permissions: + contents: read + packages: write + attestations: write + id-token: write + steps: + - name: Checkout repository + uses: actions/checkout@v4 + # Uses the `docker/login-action` action to log in to the Container registry registry using the account + # and password that will publish the packages. Once published, the packages are scoped to the account defined here. + - name: Log in to the Container registry + uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 + with: + registry: ${{ env.REGISTRY }} + username: ${{ gitea.actor }} + password: ${{ secrets.CONTAINER_TOKEN }} + # This step uses [docker/metadata-action](https://github.com/docker/metadata-action#about) to extract tags and labels + # that will be applied to the specified image. The `id` "meta" allows the output of this step to be referenced in a + # subsequent step. The `images` value provides the base name for the tags and labels. + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=ref,event=branch + type=semver,pattern={{version}} + type=sha + type=raw,value=latest + # This step uses the `docker/build-push-action` action to build the image, based on your repository's `Dockerfile`. If + # the build succeeds, it pushes the image to GitHub Packages. It uses the `context` parameter to define the build's context + # as the set of files located in the specified path. For more information, see "[Usage](https://github.com/docker/build-push-action#usage)" + # in the README of the `docker/build-push-action` repository. + # It uses the `tags` and `labels` parameters to tag and label the image with the output from the "meta" step. + - name: Build and push Docker image + id: push + uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 + with: + context: . + file: Dockerfile + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + diff --git a/Dockerfile b/Dockerfile index 758594f..8f7ce33 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM swift:latest +FROM docker.io/swift:latest AS build RUN export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true \ && apt-get -q update \ @@ -6,10 +6,38 @@ RUN export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true \ && apt-get install -y \ cmake \ rustup \ - tmux + && rm -rf /var/lib/apt/lists/* -RUN userdel --remove ubuntu && \ - rustup default stable && \ +RUN rustup default stable && \ cargo install --git https://github.com/MordechaiHadad/bob.git && \ /root/.cargo/bin/bob install nightly && \ /root/.cargo/bin/bob use nightly + +FROM docker.io/swift:latest + +RUN export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true \ + && apt-get -q update \ + && apt-get -q dist-upgrade -y \ + && apt-get install -y \ + cmake \ + curl \ + git \ + just \ + tmux \ + tree-sitter-cli \ + wget \ + && rm -rf /var/lib/apt/lists/* + +COPY --from=build /root/.cargo/bin/bob /root/bin/bob +COPY --from=build /root/.local/share/bob /root/.local/share/bob + +RUN cat >> /root/.bashrc < -TODO diff --git a/justfile b/justfile new file mode 100644 index 0000000..ec90f9e --- /dev/null +++ b/justfile @@ -0,0 +1,5 @@ +docker_image := "swift-dev" +docker_tag := "latest" + +build: + @podman build -t {{docker_image}}:{{docker_tag}} .