mirror of
https://github.com/superseriousbusiness/gotosocial
synced 2024-11-22 20:33:10 +00:00
3a369d834a
* [chore] Upgrade our Go version to 1.22 With Go 1.22 having been released at the start of February, it's now been a few months. No major issues have shown up, and the two point release since then have primarily been security fixes plus some general bug fixing. This sets the required Go version to 1.22, as there's nothing in 1.22.1 or 1.22.2 that we would explicitly require. It sets the toolchain to the latest point release, to ensure we pick up any fixes from there when building releases etc. * [chore] Update CI to Go 1.22 * [chore] Update golangci-lint to 1.25.7 Newer version should know about Go 1.22 and run fine. * [chore] Update Docker container to Go 1.22 * [chore] Update Dockerfile to newer Alpine version * sign drone.yml * add missing license header --------- Co-authored-by: tobi <tobi.smethurst@protonmail.com>
55 lines
2.2 KiB
Docker
55 lines
2.2 KiB
Docker
# syntax=docker/dockerfile:1.3
|
|
# Dockerfile reference: https://docs.docker.com/engine/reference/builder/
|
|
|
|
# stage 1: generate up-to-date swagger.yaml to put in the final container
|
|
FROM --platform=${BUILDPLATFORM} golang:1.22-alpine AS swagger
|
|
|
|
RUN \
|
|
### Installs goswagger for building swagger definitions inside this container
|
|
go install "github.com/go-swagger/go-swagger/cmd/swagger@v0.30.5" && \
|
|
# Makes swagger executable
|
|
chmod +x /go/bin/swagger
|
|
|
|
COPY go.mod /go/src/github.com/superseriousbusiness/gotosocial/go.mod
|
|
COPY go.sum /go/src/github.com/superseriousbusiness/gotosocial/go.sum
|
|
COPY cmd /go/src/github.com/superseriousbusiness/gotosocial/cmd
|
|
COPY internal /go/src/github.com/superseriousbusiness/gotosocial/internal
|
|
|
|
WORKDIR /go/src/github.com/superseriousbusiness/gotosocial
|
|
RUN /go/bin/swagger generate spec -o /go/src/github.com/superseriousbusiness/gotosocial/swagger.yaml --scan-models
|
|
|
|
# stage 2: generate the web/assets/dist bundles
|
|
FROM --platform=${BUILDPLATFORM} node:18-alpine AS bundler
|
|
|
|
COPY web web
|
|
RUN yarn --cwd ./web/source install && \
|
|
yarn --cwd ./web/source ts-patch install && \
|
|
yarn --cwd ./web/source build && \
|
|
rm -rf ./web/source
|
|
|
|
# stage 3: build the executor container
|
|
FROM --platform=${TARGETPLATFORM} alpine:3.19.1 as executor
|
|
|
|
# switch to non-root user:group for GtS
|
|
USER 1000:1000
|
|
|
|
# Because we're doing multi-arch builds we can't easily do `RUN mkdir [...]`
|
|
# but we can hack around that by having docker's WORKDIR make the dirs for
|
|
# us, as the user created above.
|
|
#
|
|
# See https://docs.docker.com/engine/reference/builder/#workdir
|
|
#
|
|
# First make sure storage exists + is owned by 1000:1000, then go back
|
|
# to just /gotosocial, where we'll run from
|
|
WORKDIR "/gotosocial/storage"
|
|
WORKDIR "/gotosocial"
|
|
|
|
# copy the dist binary created by goreleaser or build.sh
|
|
COPY --chown=1000:1000 gotosocial /gotosocial/gotosocial
|
|
|
|
# copy over the web directories with templates, assets etc
|
|
COPY --chown=1000:1000 --from=bundler web /gotosocial/web
|
|
COPY --chown=1000:1000 --from=swagger /go/src/github.com/superseriousbusiness/gotosocial/swagger.yaml web/assets/swagger.yaml
|
|
|
|
VOLUME [ "/gotosocial/storage" ]
|
|
ENTRYPOINT [ "/gotosocial/gotosocial", "server", "start" ]
|