From 54a8583e47eff6dac4f9192dc1a96b4bfb96aa49 Mon Sep 17 00:00:00 2001 From: Philipp Hofer Date: Mon, 19 May 2025 18:30:51 +0200 Subject: [PATCH] Add CI to auto-build images on changes; Fixes #1 (#2) Reviewed-on: https://git.hofer.link/philipp/ci-images/pulls/2 Co-authored-by: Philipp Hofer Co-committed-by: Philipp Hofer --- .gitea/workflows/docker-build.yml | 73 +++++++++++++++++++++++++++++++ rust-latest/Dockerfile | 2 +- 2 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 .gitea/workflows/docker-build.yml diff --git a/.gitea/workflows/docker-build.yml b/.gitea/workflows/docker-build.yml new file mode 100644 index 0000000..493f8a4 --- /dev/null +++ b/.gitea/workflows/docker-build.yml @@ -0,0 +1,73 @@ +name: Build and Push Docker Images + +on: + push: + paths: + - '*/Dockerfile' + +jobs: + build-and-push: + runs-on: ubuntu-latest + container: git.hofer.link/philipp/ci-images:rust-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + + # Install Docker for Debian + - name: Install Docker + run: | + if ! command -v docker &> /dev/null; then + echo "Installing Docker for Debian..." + apt-get update + apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release + + # Add Docker's official GPG key + install -m 0755 -d /etc/apt/keyrings + curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg + chmod a+r /etc/apt/keyrings/docker.gpg + + # Add the repository to sources list + echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \ + $(lsb_release -cs) stable" | \ + tee /etc/apt/sources.list.d/docker.list > /dev/null + + apt-get update + apt-get install -y docker-ce docker-ce-cli containerd.io + else + echo "Docker is already installed" + fi + + # Determine which image to build + - name: Set image details + id: image_details + run: | + # Extract the directory of the changed Dockerfile + CHANGED_FILE="${{ github.event.commits[0].modified[0] }}" + if [[ $CHANGED_FILE == */Dockerfile ]]; then + IMAGE_PATH=$(dirname "$CHANGED_FILE") + else + IMAGE_PATH="rust-latest" # Default + fi + + # Set outputs + echo "image_path=$IMAGE_PATH" >> $GITHUB_OUTPUT + echo "image_name=$(basename $IMAGE_PATH)" >> $GITHUB_OUTPUT + + echo "Building image from directory: $IMAGE_PATH" + echo "Image name: $(basename $IMAGE_PATH)" + + - name: Login to Gitea Docker Registry + uses: docker/login-action@v2 + with: + registry: git.hofer.link + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Build and Push Docker image + uses: docker/build-push-action@v4 + with: + context: ./${{ steps.image_details.outputs.image_path }} + push: true + tags: git.hofer.link/philipp/ci-images:${{ steps.image_details.outputs.image_name }} + diff --git a/rust-latest/Dockerfile b/rust-latest/Dockerfile index 69866f9..8149b4a 100644 --- a/rust-latest/Dockerfile +++ b/rust-latest/Dockerfile @@ -5,7 +5,7 @@ # 2. Tag the image: `docker tag git.hofer.link/philipp/ci-images:rust-latest` # 3. Push the image: `docker push git.hofer.link/philipp/ci-images:rust-latest` -FROM rust:1.86 +FROM rust:1.87 RUN apt-get update && apt-get install -y sqlite3