diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml new file mode 100644 index 0000000..69fdedf --- /dev/null +++ b/.github/workflows/docker.yaml @@ -0,0 +1,46 @@ +name: Build and Push Docker Image + +on: + push: + branches: [main] + +jobs: + build: + runs-on: ubuntu-latest + + container: + image: quay.io/buildah/stable + options: --security-opt seccomp=unconfined --security-opt apparmor=unconfined --device /dev/fuse:rw --privileged + + env: + BUILDAH_ISOLATION: chroot + STORAGE_DRIVER: vfs + + steps: + - name: Install Node.js + run: dnf install -y nodejs git + + - uses: actions/checkout@v4 + with: + ssh-user: ${{ secrets.REGISTRY_USER }} + token: ${{ secrets.REGISTRY_PASSWORD }} + submodules: true + + - name: Login to Registry + run: buildah login -u ${{ secrets.REGISTRY_USER }} -p ${{ secrets.REGISTRY_PASSWORD }} git.kocoder.xyz + + - name: Generate Tag + id: tag + run: | + SHORT_SHA=$(echo "${{ github.sha }}" | cut -c1-7) + echo "value=${{ github.ref_name }}-$(date +%s)-${SHORT_SHA}" >> $GITHUB_OUTPUT + + - name: Buildah Build + run: | + buildah build -t ${{ steps.tag.outputs.value }} . + buildah tag ${{ steps.tag.outputs.value }} latest + + - name: Push Docker Images + run: | + buildah push ${{ steps.tag.outputs.value }} docker://git.kocoder.xyz/vt/link-shortening-service:${{ steps.tag.outputs.value }} + buildah push latest docker://git.kocoder.xyz/vt/link-shortening-service:latest diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..d886468 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,26 @@ +FROM golang:1.26-bookworm AS base + +# Move to working directory /app +WORKDIR /app + +# Copy the go.mod and go.sum files to the /app directory +COPY go.mod go.sum ./ + +# Install dependencies +RUN go mod download + +# Copy the entire source code into the container +COPY . . + +# Build the application +RUN go build -o shortener + +FROM golang:1.26-bookworm AS runner + +COPY --from=base /app/shortener /app/shortener + +# Document the port that may need to be published +EXPOSE 8000 + +# Start the application +CMD ["/app/shortener"]