From 86ffa87dcc357c903afa74bd4dab03efff9b8683 Mon Sep 17 00:00:00 2001 From: engigu Date: Sat, 27 Jan 2024 22:11:27 +0800 Subject: [PATCH] feat: add goreleaser docker image publish --- .github/workflows/release.yml | 25 ++++++++------- .goreleaser.yaml | 59 ++++++++++++++++++++++++++++++----- Dockerfile | 12 +++---- 3 files changed, 71 insertions(+), 25 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 51bc73b..356acdd 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -19,6 +19,8 @@ jobs: env: NODE_ENV: prod + CUSTOM_PROJ_NAME: Message-Nest + DOCKER_IMAGE_NAME: message-nest steps: - uses: actions/checkout@v3 @@ -26,22 +28,23 @@ jobs: fetch-depth: 0 - run: git fetch --force --tags + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Docker Login + uses: docker/login-action@v3 + with: + registry: docker.io + username: ${{ secrets.DOCKER_USER }} + password: ${{ secrets.DOCKER_PASSWD }} + - uses: actions/setup-go@v3 with: go-version: '>=1.20.2' cache: true - - name: Install npm dependencies - run: npm i - working-directory: web/ - - - name: Run npm build - run: export NODE_ENV=prod && npm run build - working-directory: web/ - - - name: Check build static - run: ls dist/ -la - working-directory: web/ + - name: Git File Restore + run: git checkout . # More assembly might be required: Docker logins, GPG, etc. It all depends # on your needs. diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 53bea1f..255b42d 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -6,20 +6,63 @@ before: - go mod tidy # you may remove this if you don't need go generate - go generate ./... + builds: - - env: - - CGO_ENABLED=0 + - env: [ CGO_ENABLED=0 ] goos: - linux - windows - darwin + goarch: + - amd64 + - arm64 + id: "{{ .Env.CUSTOM_PROJ_NAME }}" + binary: "{{ .Env.CUSTOM_PROJ_NAME }}" + +dockers: + - image_templates: [ "docker.io/engigu/{{ .Env.DOCKER_IMAGE_NAME }}:{{ .Version }}-amd64" ] + dockerfile: Dockerfile + use: buildx + build_flag_templates: + - --platform=linux/amd64 + - --label=org.opencontainers.image.title={{ .ProjectName }} + - --label=org.opencontainers.image.description={{ .ProjectName }} + - --label=org.opencontainers.image.url=https://github.com/engigu/{{ .ProjectName }} + - --label=org.opencontainers.image.source=https://github.com/engigu/{{ .ProjectName }} + - --label=org.opencontainers.image.version={{ .Version }} + - --label=org.opencontainers.image.created={{ time "2006-01-02T15:04:05Z07:00" }} + - --label=org.opencontainers.image.revision={{ .FullCommit }} + - --label=org.opencontainers.image.licenses=MIT + - image_templates: [ "docker.io/engigu/{{ .Env.DOCKER_IMAGE_NAME }}:{{ .Version }}-arm64v8" ] + goarch: arm64 + dockerfile: Dockerfile + use: buildx + build_flag_templates: + - --platform=linux/arm64/v8 + - --label=org.opencontainers.image.title={{ .ProjectName }} + - --label=org.opencontainers.image.description={{ .ProjectName }} + - --label=org.opencontainers.image.url=https://github.com/engigu/{{ .ProjectName }} + - --label=org.opencontainers.image.source=https://github.com/engigu/{{ .ProjectName }} + - --label=org.opencontainers.image.version={{ .Version }} + - --label=org.opencontainers.image.created={{ time "2006-01-02T15:04:05Z07:00" }} + - --label=org.opencontainers.image.revision={{ .FullCommit }} + - --label=org.opencontainers.image.licenses=MIT +docker_manifests: + - name_template: docker.io/engigu/{{ .Env.DOCKER_IMAGE_NAME }}:{{ .Version }} + image_templates: + - docker.io/engigu/{{ .Env.DOCKER_IMAGE_NAME }}:{{ .Version }}-amd64 + - docker.io/engigu/{{ .Env.DOCKER_IMAGE_NAME }}:{{ .Version }}-arm64v8 + - name_template: docker.io/engigu/{{ .Env.DOCKER_IMAGE_NAME }}:latest + image_templates: + - docker.io/engigu/{{ .Env.DOCKER_IMAGE_NAME }}:{{ .Version }}-amd64 + - docker.io/engigu/{{ .Env.DOCKER_IMAGE_NAME }}:{{ .Version }}-arm64v8 archives: - format: tar.gz # this name template makes the OS and Arch compatible with the results of uname. # {{ .ProjectName }}_ name_template: >- - Message-Nest_ + {{ .Env.CUSTOM_PROJ_NAME }}_ {{- title .Os }}_ {{- if eq .Arch "amd64" }}x86_64 {{- else if eq .Arch "386" }}i386 @@ -27,12 +70,12 @@ archives: {{- if .Arm }}v{{ .Arm }}{{ end }} # use zip for windows archives format_overrides: - - goos: windows - format: zip + - goos: windows + format: zip files: - - LICENSE - - README.md - - conf/* + - LICENSE + - README.md + - conf/* checksum: name_template: 'checksums.txt' diff --git a/Dockerfile b/Dockerfile index fa23127..e1aa2d2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,9 @@ -FROM golang:latest +FROM ubuntu:latest + +COPY ./ /app/ -ENV GOPROXY https://goproxy.cn,direct WORKDIR /app -COPY . /app -RUN go build . - EXPOSE 8000 -ENTRYPOINT ["./Message-Nest"] + +CMD ["/app/Message-Nest"] +