diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml deleted file mode 100644 index 321ef7f..0000000 --- a/.github/workflows/docker-image.yml +++ /dev/null @@ -1,51 +0,0 @@ -name: docker hub release - -# build master with multi-arch to docker hub - -on: - push: - # Sequence of patterns matched against refs/tags - tags: - - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10 - -jobs: - buildx-dockerhub: - if: github.repository == 'jeessy2/ddns-go' - runs-on: ubuntu-latest - env: - DOCKER_REPO: ${{ secrets.DOCKER_USERNAME }}/ddns-go - DOCKER_PLATFORMS: linux/amd64,linux/arm,linux/arm64 - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Docker meta - id: meta - uses: docker/metadata-action@v5 - with: - images: | - ${{ env.DOCKER_REPO }} - ghcr.io/${{ github.repository }} - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - name: Set up Docker buildx - uses: docker/setup-buildx-action@v3 - - name: Login to Docker Hub # login to Docker Hub, automatically logout at the end of job - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - name: Login to GitHub Container Registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - name: Run buildx and push - uses: docker/build-push-action@v6 - with: - context: . - provenance: false - push: true # push to docker hub - platforms: ${{ env.DOCKER_PLATFORMS }} - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1bdc275..9346659 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -8,6 +8,7 @@ on: permissions: contents: write + packages: write jobs: goreleaser: @@ -24,6 +25,25 @@ jobs: with: go-version-file: 'go.mod' + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Run GoReleaser uses: goreleaser/goreleaser-action@v6 if: startsWith(github.ref, 'refs/tags/') @@ -33,6 +53,7 @@ jobs: args: release --clean env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} homebrew: needs: goreleaser diff --git a/.goreleaser.yml b/.goreleaser.yml index 8373f23..7419a08 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -44,9 +44,12 @@ builds: goarch: '386' - goos: android goarch: amd64 - ldflags: - -s -w -X main.version={{.Tag}} -X main.buildTime={{.Date}} + hooks: + post: + - sh -c '[ ! -d "zoneinfo" ] && cp -r /usr/share/zoneinfo . || true' + archives: # use zip for windows archives - format_overrides: @@ -62,13 +65,82 @@ archives: {{- else }}{{ .Arch }}{{ end }} {{- if .Mips }}_{{ .Mips }}{{ end }} {{- if .Arm }}v{{ .Arm }}{{ end }} + checksum: name_template: 'checksums.txt' snapshot: - name_template: '{{ .Tag }}-next' + version_template: "{{ incpatch .Version }}-devel" changelog: sort: asc filters: exclude: - '^docs:' - '^test:' + +dockers: + - image_templates: + - "{{ .Env.DOCKER_USERNAME }}/ddns-go:{{ .Tag }}-amd64" + - "ghcr.io/{{ tolower .Env.GITHUB_REPOSITORY }}:{{ .Tag }}-amd64" + use: buildx + extra_files: + - zoneinfo + build_flag_templates: + - "--platform=linux/amd64" + - "--label=org.opencontainers.image.created={{.Date}}" + - "--label=org.opencontainers.image.title={{.ProjectName}}" + - "--label=org.opencontainers.image.revision={{.FullCommit}}" + - "--label=org.opencontainers.image.version={{.Version}}" + + - image_templates: + - "{{ .Env.DOCKER_USERNAME }}/ddns-go:{{ .Tag }}-arm64" + - "ghcr.io/{{ tolower .Env.GITHUB_REPOSITORY }}:{{ .Tag }}-arm64" + use: buildx + extra_files: + - zoneinfo + build_flag_templates: + - "--platform=linux/arm64" + - "--label=org.opencontainers.image.created={{.Date}}" + - "--label=org.opencontainers.image.title={{.ProjectName}}" + - "--label=org.opencontainers.image.revision={{.FullCommit}}" + - "--label=org.opencontainers.image.version={{.Version}}" + goarch: arm64 + + - image_templates: + - "{{ .Env.DOCKER_USERNAME }}/ddns-go:{{ .Tag }}-armv7" + - "ghcr.io/{{ tolower .Env.GITHUB_REPOSITORY }}:{{ .Tag }}-armv7" + use: buildx + extra_files: + - zoneinfo + build_flag_templates: + - "--platform=linux/arm/v7" + - "--label=org.opencontainers.image.created={{.Date}}" + - "--label=org.opencontainers.image.title={{.ProjectName}}" + - "--label=org.opencontainers.image.revision={{.FullCommit}}" + - "--label=org.opencontainers.image.version={{.Version}}" + goarch: arm + goarm: 7 + +docker_manifests: + - name_template: "{{ .Env.DOCKER_USERNAME }}/ddns-go:{{ .Tag }}" + image_templates: + - "{{ .Env.DOCKER_USERNAME }}/ddns-go:{{ .Tag }}-amd64" + - "{{ .Env.DOCKER_USERNAME }}/ddns-go:{{ .Tag }}-arm64" + - "{{ .Env.DOCKER_USERNAME }}/ddns-go:{{ .Tag }}-armv7" + + - name_template: "{{ .Env.DOCKER_USERNAME }}/ddns-go:latest" + image_templates: + - "{{ .Env.DOCKER_USERNAME }}/ddns-go:{{ .Tag }}-amd64" + - "{{ .Env.DOCKER_USERNAME }}/ddns-go:{{ .Tag }}-arm64" + - "{{ .Env.DOCKER_USERNAME }}/ddns-go:{{ .Tag }}-armv7" + + - name_template: "ghcr.io/{{ tolower .Env.GITHUB_REPOSITORY }}:{{ .Tag }}" + image_templates: + - "ghcr.io/{{ tolower .Env.GITHUB_REPOSITORY }}:{{ .Tag }}-amd64" + - "ghcr.io/{{ tolower .Env.GITHUB_REPOSITORY }}:{{ .Tag }}-arm64" + - "ghcr.io/{{ tolower .Env.GITHUB_REPOSITORY }}:{{ .Tag }}-armv7" + + - name_template: "ghcr.io/{{ tolower .Env.GITHUB_REPOSITORY }}:latest" + image_templates: + - "ghcr.io/{{ tolower .Env.GITHUB_REPOSITORY }}:{{ .Tag }}-amd64" + - "ghcr.io/{{ tolower .Env.GITHUB_REPOSITORY }}:{{ .Tag }}-arm64" + - "ghcr.io/{{ tolower .Env.GITHUB_REPOSITORY }}:{{ .Tag }}-armv7" diff --git a/Dockerfile b/Dockerfile index 9740e81..c355b23 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,23 +1,12 @@ -# build stage -FROM --platform=$BUILDPLATFORM golang:1.20-alpine AS builder - -WORKDIR /app -COPY . . -ARG TARGETOS TARGETARCH - -RUN apk add --no-cache git make tzdata \ - && GOOS=$TARGETOS GOARCH=$TARGETARCH make clean build - -# final stage FROM alpine LABEL name=ddns-go LABEL url=https://github.com/jeessy2/ddns-go RUN apk add --no-cache curl grep WORKDIR /app -COPY --from=builder /usr/share/zoneinfo /usr/share/zoneinfo +COPY ddns-go /app/ +COPY zoneinfo /usr/share/zoneinfo ENV TZ=Asia/Shanghai -COPY --from=builder /app/ddns-go /app/ddns-go EXPOSE 9876 ENTRYPOINT ["/app/ddns-go"] -CMD ["-l", ":9876", "-f", "300"] +CMD ["-l", ":9876", "-f", "300"] \ No newline at end of file