huge refactoring

This commit is contained in:
Julien Neuhart
2019-07-23 13:57:18 +02:00
parent f6b357691c
commit 7bfbda4490
105 changed files with 4051 additions and 2667 deletions

View File

@@ -16,7 +16,7 @@ RUN echo "deb http://httpredir.debian.org/debian/ stretch main contrib non-free"
# |--------------------------------------------------------------------------
# |
# | Installs PM2 for launching programs in background and with failure
# | recovering. In our case: Chrome (headless) and Office (headless).
# | recovering. In our case: Google Chrome (headless) and unoconv.
# |
RUN curl -sL https://deb.nodesource.com/setup_9.x | bash - &&\
@@ -101,6 +101,8 @@ COPY build/base/fonts.conf /etc/fonts/conf.d/100-gotenberg.conf
# |
RUN groupadd --gid 1001 gotenberg \
&& useradd --uid 1001 --gid gotenberg --shell /bin/bash --no-create-home gotenberg \
&& useradd --uid 1001 --gid gotenberg --shell /bin/bash --home /gotenberg --no-create-home gotenberg \
&& mkdir /gotenberg \
&& chown gotenberg: /gotenberg
ENV PM2_HOME=/gotenberg/.pm2

View File

@@ -1,6 +1,4 @@
ARG GOLANG_VERSION
FROM golang:${GOLANG_VERSION}-stretch
FROM thecodingmachine/gotenberg:workspace
# |--------------------------------------------------------------------------
# | static
@@ -19,6 +17,6 @@ RUN go get github.com/apex/static/cmd/static-docs
# | Last instructions of this build.
# |
WORKDIR /docs
WORKDIR /gotenberg/docs
CMD [ "static-docs", "--in", "build/docs/content", "--out", "docs", "--theme", "gotenberg", "--title", "Gotenberg", "--subtitle", "A Docker-powered stateless API for converting HTML, Markdown and Office documents to PDF." ]

View File

@@ -1,6 +1,4 @@
ARG GOLANG_VERSION
FROM golang:${GOLANG_VERSION}-stretch
FROM thecodingmachine/gotenberg:workspace
# |--------------------------------------------------------------------------
# | GolangCI-Lint
@@ -10,7 +8,7 @@ FROM golang:${GOLANG_VERSION}-stretch
# | than gometalinter.
# |
ENV GOLANGCI_LINT_VERSION 1.16.0
ARG GOLANGCI_LINT_VERSION
RUN curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b /usr/local/bin v${GOLANGCI_LINT_VERSION} &&\
golangci-lint --version
@@ -23,13 +21,14 @@ RUN curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.s
# |
# Define our working directory outside of $GOPATH (we're using go modules).
WORKDIR /lint
USER gotenberg
WORKDIR /gotenberg/lint
# Copy our module dependencies definitions.
COPY go.mod .
COPY go.sum .
# Copy our code source.
COPY --chown=gotenberg:gotenberg . .
# Install module dependencies.
RUN go mod download
RUN go mod download &&\
go mod verify
CMD ["golangci-lint", "run" ,"--tests=false", "--enable-all", "--disable=dupl" ]

View File

@@ -1,5 +1,3 @@
ARG GOLANG_VERSION
# |--------------------------------------------------------------------------
# | Binary
# |--------------------------------------------------------------------------
@@ -7,7 +5,7 @@ ARG GOLANG_VERSION
# | Buils Gotenberg binary.
# |
FROM golang:${GOLANG_VERSION}-stretch AS golang
FROM thecodingmachine/gotenberg:workspace AS workspace
ARG VERSION
@@ -16,7 +14,7 @@ ENV GOOS=linux \
CGO_ENABLED=0
# Define our workding outside of $GOPATH (we're using go modules).
WORKDIR /gotenberg
WORKDIR /gotenberg/package
# Copy our source code.
COPY internal ./internal
@@ -25,7 +23,7 @@ COPY go.sum go.sum
COPY go.mod go.mod
# Build our binary.
RUN go build -o /gotenberg/gotenberg -ldflags "-X main.version=${VERSION}" cmd/gotenberg/main.go
RUN go build -o gotenberg -ldflags "-X main.version=${VERSION}" cmd/gotenberg/main.go
# |--------------------------------------------------------------------------
# | Final touch
@@ -38,9 +36,8 @@ FROM thecodingmachine/gotenberg:base
LABEL authors="Julien Neuhart <j.neuhart@thecodingmachine.com>"
COPY --from=golang /gotenberg/gotenberg /usr/local/bin/
COPY --from=workspace /gotenberg/package/gotenberg /usr/local/bin/
ENV PM2_HOME=/gotenberg/.pm2
USER gotenberg
WORKDIR /gotenberg

View File

@@ -1,48 +1,14 @@
ARG GOLANG_VERSION
FROM thecodingmachine/gotenberg:workspace
FROM golang:${GOLANG_VERSION}-stretch AS golang
# Define our workding outside of $GOPATH (we're using go modules).
USER gotenberg
WORKDIR /gotenberg/tests
FROM thecodingmachine/gotenberg:base
# |--------------------------------------------------------------------------
# | Common libraries
# |--------------------------------------------------------------------------
# |
# | Libraries used in the build process of this image.
# |
RUN apt-get install -y git gcc
# |--------------------------------------------------------------------------
# | Golang
# |--------------------------------------------------------------------------
# |
# | Installs Golang.
# |
COPY --from=golang /usr/local/go /usr/local/go
RUN export PATH="/usr/local/go/bin:$PATH" &&\
go version
ENV GOPATH /go
ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH
# |--------------------------------------------------------------------------
# | Final touch
# |--------------------------------------------------------------------------
# |
# | Last instructions of this build.
# |
# Define our working directory outside of $GOPATH (we're using go modules).
WORKDIR /tests
# Copy our module dependencies definitions.
COPY go.mod .
COPY go.sum .
# Copy our code source.
COPY --chown=gotenberg:gotenberg . .
# Install module dependencies.
RUN go mod download
RUN go mod download &&\
go mod verify
ENTRYPOINT [ "build/tests/docker-entrypoint.sh" ]

View File

@@ -2,19 +2,33 @@
set -xe
# Make sure the user running the
# tests is the Gotenberg user.
CURRENT_USER=$(whoami)
if [ "$CURRENT_USER" != "gotenberg" ]; then
exit 1
fi
# Start the PM2 processes
# (Google Chrome headless & unoconv listener).
go run github.com/thecodingmachine/gotenberg/test/cmd/pm2
# Run our tests.
go test -race -cover ./...
# Testing PM2 processes launch separatly for avoiding
# spending to much time on each tests depending on
# them.
go test github.com/thecodingmachine/gotenberg/internal/pkg/pm2 -run TestChromeStart
go test github.com/thecodingmachine/gotenberg/internal/pkg/pm2 -run TestUnoconvStart
#go test github.com/thecodingmachine/gotenberg/internal/pkg/pm2 -run TestChromeStart
#go test github.com/thecodingmachine/gotenberg/internal/pkg/pm2 -run TestUnoconvStart
# Running others tests.
go test -race -cover -covermode=atomic github.com/thecodingmachine/gotenberg/internal/pkg/config
go test -race -cover -covermode=atomic github.com/thecodingmachine/gotenberg/internal/pkg/random
go test -race -cover -covermode=atomic github.com/thecodingmachine/gotenberg/internal/pkg/standarderror
go test -race -cover -covermode=atomic github.com/thecodingmachine/gotenberg/internal/pkg/timeout
go test -race -cover -covermode=atomic github.com/thecodingmachine/gotenberg/internal/app/api
#go test -race -cover -covermode=atomic github.com/thecodingmachine/gotenberg/internal/pkg/config
#go test -race -cover -covermode=atomic github.com/thecodingmachine/gotenberg/internal/pkg/random
#go test -race -cover -covermode=atomic github.com/thecodingmachine/gotenberg/internal/pkg/standarderror
#go test -race -cover -covermode=atomic github.com/thecodingmachine/gotenberg/internal/pkg/timeout
#go test -race -cover -covermode=atomic github.com/thecodingmachine/gotenberg/internal/app/api
# Finally testing processes shutdown.
go test github.com/thecodingmachine/gotenberg/internal/pkg/pm2 -run TestChromeShutdown
go test github.com/thecodingmachine/gotenberg/internal/pkg/pm2 -run TestUnoconvShutdown
#go test github.com/thecodingmachine/gotenberg/internal/pkg/pm2 -run TestChromeShutdown
#go test github.com/thecodingmachine/gotenberg/internal/pkg/pm2 -run TestUnoconvShutdown

View File

@@ -0,0 +1,52 @@
FROM thecodingmachine/gotenberg:base
ARG GOLANG_VERSION
# |--------------------------------------------------------------------------
# | Common libraries
# |--------------------------------------------------------------------------
# |
# | Libraries used in the build process of this image.
# |
RUN apt-get update && apt-get install -y --no-install-recommends \
git \
g++ \
gcc \
libc6-dev \
make \
pkg-config \
&& rm -rf /var/lib/apt/lists/*
# |--------------------------------------------------------------------------
# | Golang
# |--------------------------------------------------------------------------
# |
# | Installs Golang.
# |
RUN wget https://dl.google.com/go/go${GOLANG_VERSION}.linux-amd64.tar.gz &&\
tar -xvf go${GOLANG_VERSION}.linux-amd64.tar.gz &&\
mv go /usr/local
ENV GOPATH /gotenberg/go
ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH
RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" &&\
chmod -R 777 "$GOPATH"
# |--------------------------------------------------------------------------
# | Final touch
# |--------------------------------------------------------------------------
# |
# | Last instructions of this build.
# |
# Make sure the Gotenber user is able to
# call the Go binary.
USER gotenberg
RUN go version &&\
go env
USER root