diff --git a/.github/Dockerfile b/.github/Dockerfile new file mode 100644 index 00000000..5ebb832d --- /dev/null +++ b/.github/Dockerfile @@ -0,0 +1,59 @@ +FROM amd64/node AS node-builder + +LABEL maintainer="mingcheng" + +COPY . /answer +WORKDIR /answer +RUN make install-ui-packages ui && mv ui/build /tmp + +# stage2 build the main binary within static resource +FROM golang:1.19-alpine AS golang-builder +LABEL maintainer="aichy@sf.com" + +ARG GOPROXY +ENV GOPROXY=https://goproxy.cn,direct + +ENV GOPATH /go +ENV GOROOT /usr/local/go +ENV PACKAGE github.com/answerdev/answer +ENV BUILD_DIR ${GOPATH}/src/${PACKAGE} + +ARG TAGS="sqlite sqlite_unlock_notify" +ENV TAGS "bindata timetzdata $TAGS" +ARG CGO_EXTRA_CFLAGS + +COPY . ${BUILD_DIR} +WORKDIR ${BUILD_DIR} +COPY --from=node-builder /tmp/build ${BUILD_DIR}/ui/build +RUN apk --no-cache add build-base git \ + && make clean build \ + && cp answer /usr/bin/answer + +RUN mkdir -p /data/uploads && chmod 777 /data/uploads \ + && mkdir -p /data/i18n && cp -r i18n/*.yaml /data/i18n + +# stage3 copy the binary and resource files into fresh container +FROM alpine +LABEL maintainer="maintainers@sf.com" + +ENV TZ "Asia/Shanghai" +RUN apk update \ + && apk --no-cache add \ + bash \ + ca-certificates \ + curl \ + dumb-init \ + gettext \ + openssh \ + sqlite \ + gnupg \ + && echo "Asia/Shanghai" > /etc/timezone + +COPY --from=golang-builder /usr/bin/answer /usr/bin/answer +COPY --from=golang-builder /data /data +COPY /script/entrypoint.sh /entrypoint.sh +RUN chmod 755 /entrypoint.sh + +VOLUME /data +EXPOSE 80 +ENTRYPOINT ["/entrypoint.sh"] diff --git a/.github/workflows/build_dockerhub_img.yml b/.github/workflows/build_dockerhub_img.yml index 5f4d6849..1cec6b70 100644 --- a/.github/workflows/build_dockerhub_img.yml +++ b/.github/workflows/build_dockerhub_img.yml @@ -39,12 +39,12 @@ jobs: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - - name: Login to GitHub Container Registry - uses: docker/login-action@v2 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} + # - name: Login to GitHub Container Registry + # uses: docker/login-action@v2 + # with: + # registry: ghcr.io + # username: ${{ github.actor }} + # password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push uses: docker/build-push-action@v4 @@ -52,10 +52,8 @@ jobs: context: . platforms: linux/amd64,linux/arm64 push: true + file: ./.github/Dockerfile tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} - cache-from: type=gha - cache-to: type=gha,mode=max - diff --git a/go.mod b/go.mod index be249e79..0cdb7b76 100644 --- a/go.mod +++ b/go.mod @@ -139,3 +139,4 @@ require ( // github action runner Sometimes it will time out. replace gitee.com/travelliu/dm v1.8.11192 => github.com/aichy126/dm v1.8.11192 +replace modernc.org/z v1.2.19 => github.com/aichy126/modernc.org_z v1.2.19