diff --git a/.gitignore b/.gitignore index 7847b3f..3a6b11b 100644 --- a/.gitignore +++ b/.gitignore @@ -5,8 +5,6 @@ data/ vieter dvieter pvieter -dvieterctl -vieterctl vieter.c # Ignore testing files diff --git a/.woodpecker/.docker.yml b/.woodpecker/.docker.yml index b2f08ca..6202fe6 100644 --- a/.woodpecker/.docker.yml +++ b/.woodpecker/.docker.yml @@ -9,6 +9,7 @@ pipeline: secrets: [ docker_username, docker_password ] settings: repo: chewingbever/vieter + dockerfile: Dockerfile.ci tag: dev platforms: [ linux/arm/v7, linux/arm64/v8, linux/amd64 ] build_args_from_env: @@ -22,6 +23,7 @@ pipeline: secrets: [ docker_username, docker_password ] settings: repo: chewingbever/vieter + dockerfile: Dockerfile.ci auto_tag: true platforms: [ linux/arm/v7, linux/arm64/v8, linux/amd64 ] build_args_from_env: diff --git a/Dockerfile b/Dockerfile index 8b62521..5564e34 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,56 +1,19 @@ FROM chewingbever/vlang:latest AS builder -ARG TARGETPLATFORM -ARG CI_COMMIT_SHA -ARG DI_VER=1.2.5 - WORKDIR /app -# Build dumb-init -RUN curl -Lo - "https://github.com/Yelp/dumb-init/archive/refs/tags/v${DI_VER}.tar.gz" | tar -xzf - && \ - cd "dumb-init-${DI_VER}" && \ - make SHELL=/bin/sh && \ - mv dumb-init .. && \ - cd .. - # Copy over source code & build production binary COPY src ./src COPY Makefile ./ -RUN if [ -n "${CI_COMMIT_SHA}" ]; then \ - curl --fail \ - -o vieter \ - "https://s3.rustybever.be/vieter/commits/${CI_COMMIT_SHA}/vieter-$(echo "${TARGETPLATFORM}" | sed 's:/:-:g')" && \ - chmod +x vieter ; \ - else \ - LDFLAGS='-lz -lbz2 -llzma -lexpat -lzstd -llz4 -static' make prod && \ - mv pvieter vieter ; \ - fi +ENV LDFLAGS='-lz -lbz2 -llzma -lexpat -lzstd -llz4 -static' +RUN v -o pvieter -cflags "-O3" src -FROM busybox:1.35.0 +FROM alpine:3.15 -ENV PATH=/bin \ - VIETER_REPO_DIR=/data/repo \ - VIETER_PKG_DIR=/data/pkgs \ - VIETER_DOWNLOAD_DIR=/data/downloads \ - VIETER_REPOS_FILE=/data/repos.json +ENV REPO_DIR=/data -COPY --from=builder /app/dumb-init /app/vieter /bin/ +COPY --from=builder /app/pvieter /usr/local/bin/vieter -HEALTHCHECK --interval=30s \ - --timeout=3s \ - --start-period=5s \ - CMD /bin/wget --spider http://localhost:8000/health || exit 1 - -RUN mkdir /data && \ - chown -R www-data:www-data /data && \ - mkdir -p '/var/spool/cron/crontabs' && \ - echo '0 3 * * * /bin/vieter build' | crontab - - -WORKDIR /data - -USER www-data:www-data - -ENTRYPOINT ["/bin/dumb-init", "--"] -CMD ["/bin/vieter", "server"] +ENTRYPOINT [ "/usr/local/bin/vieter" ] diff --git a/Dockerfile.ci b/Dockerfile.ci new file mode 100644 index 0000000..a062d95 --- /dev/null +++ b/Dockerfile.ci @@ -0,0 +1,50 @@ +# vim: ft=dockerfile +# This image just has the required tools to download the binaries +FROM chewingbever/vlang:latest AS builder + +ARG TARGETPLATFORM +ARG CI_COMMIT_SHA +ARG DI_VER=1.2.5 + +WORKDIR /app + +# Build dumb-init +RUN curl -Lo - "https://github.com/Yelp/dumb-init/archive/refs/tags/v${DI_VER}.tar.gz" | tar -xzf - && \ + cd "dumb-init-${DI_VER}" && \ + make SHELL=/bin/sh && \ + mv dumb-init .. && \ + cd .. + +RUN curl --fail \ + -o vieter \ + "https://s3.rustybever.be/vieter/commits/${CI_COMMIT_SHA}/vieter-$(echo "${TARGETPLATFORM}" | sed 's:/:-:g')" && \ + chmod +x vieter + + +FROM busybox:1.35.0 + +ENV PATH=/bin \ + VIETER_REPO_DIR=/data/repo \ + VIETER_PKG_DIR=/data/pkgs \ + VIETER_DOWNLOAD_DIR=/data/downloads \ + VIETER_REPOS_FILE=/data/repos.json + +COPY --from=builder /app/dumb-init /app/vieter /bin/ + +HEALTHCHECK --interval=30s \ + --timeout=3s \ + --start-period=5s \ + CMD /bin/wget --spider http://localhost:8000/health || exit 1 + +RUN mkdir /data && \ + chown -R www-data:www-data /data && \ + mkdir -p '/var/spool/cron/crontabs' && \ + echo '0 3 * * * /bin/vieter build' >> /var/spool/cron/crontabs/www-data && \ + chown www-data:www-data /var/spool/cron/crontabs/www-data + +WORKDIR /data + +USER www-data:www-data + +ENTRYPOINT ["/bin/dumb-init", "--"] +CMD ["/bin/vieter", "server"] diff --git a/Makefile b/Makefile index bd629c9..062a47f 100644 --- a/Makefile +++ b/Makefile @@ -42,17 +42,6 @@ pvieter: $(SOURCES) c: $(V) -o vieter.c $(SRC_DIR) -# Build the CLI tool -.PHONY: cli -cli: dvieterctl -dvieterctl: cli.v - $(V_PATH) -showcc -o dvieterctl cli.v - -.PHONY: cli-prod -cli-prod: vieterctl -vieterctl: cli.v -cli-prod: - $(V_PATH) -showcc -o vieterctl -prod cli.v # =====EXECUTION===== # Run the server in the default 'data' directory