From 06f78b4f8c7fdac49a9f4cc190e7f0c7a0a32ee3 Mon Sep 17 00:00:00 2001 From: Ayman Bagabas Date: Thu, 26 Aug 2021 14:21:36 -0400 Subject: [PATCH] Release: Use GoReleaser for release - use github actions and goreleaser to automatically build and publish release on new tags - build binaries - build dep/rpm packages for linux - build docker images tagged with release version and 'latest' tag - publish release on github releases - publish docker images on github container registry - replace `Dockerfile` with `Dockerfile.goreleaser` - update `docker-compose.yml` to use `ghcr.io` --- .github/workflows/release.yml | 48 ++++++++++ .gitignore | 4 + .goreleaser.yml | 165 ++++++++++++++++++++++++++++++++++ Dockerfile | 21 ----- Dockerfile.goreleaser | 6 ++ docker-compose.yml | 14 ++- 6 files changed, 234 insertions(+), 24 deletions(-) create mode 100644 .github/workflows/release.yml create mode 100644 .goreleaser.yml delete mode 100644 Dockerfile create mode 100644 Dockerfile.goreleaser diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..a2a0660 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,48 @@ +name: Release + +on: + push: + tags: + - 'v*.*' + +permissions: + contents: write + packages: write + +jobs: + goreleaser: + runs-on: ubuntu-latest + steps: + - + name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + - + name: Set up Go + uses: actions/setup-go@v2 + with: + go-version: 1.17 + + + - name: Login to GitHub Container Registry + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Run GoReleaser + uses: goreleaser/goreleaser-action@v2 + with: + distribution: goreleaser + version: latest + args: release --rm-dist + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Upload assets + uses: actions/upload-artifact@v2 + with: + name: ssh-chat + path: dist/*.* \ No newline at end of file diff --git a/.gitignore b/.gitignore index 9bcc9f9..e4729ef 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,8 @@ host_key.pub ssh-chat *.log .* +!.goreleaser.yml +!.github vendor/ +dist +sshchat \ No newline at end of file diff --git a/.goreleaser.yml b/.goreleaser.yml new file mode 100644 index 0000000..05fd251 --- /dev/null +++ b/.goreleaser.yml @@ -0,0 +1,165 @@ +project_name: ssh-chat + +env: + - GO111MODULE=on + - CGO_ENABLED=0 + +before: + hooks: + - go mod download + +builds: + - id: "ssh-chat" + dir: "./cmd/ssh-chat" + binary: "ssh-chat" + ldflags: -X main.Version={{ .Version }} -extldflags "-static" + goos: + - linux + - windows + - freebsd + - darwin + goarch: + - amd64 + - 386 + - arm + - arm64 + goarm: + - 6 + - 7 + ignore: + - goos: darwin + goarch: 386 + - goos: darwin + goarch: arm + - goos: freebsd + goarch: 386 + - goos: freebsd + goarch: arm + - goos: freebsd + goarch: arm64 + - goos: windows + goarch: arm + - goos: windows + goarch: arm64 + +dockers: + - image_templates: + - "ghcr.io/shazow/{{ .ProjectName }}:latest-amd64" + - "ghcr.io/shazow/{{ .ProjectName }}:{{ .Version }}-amd64" + ids: [ssh-chat] + goarch: amd64 + 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/shazow/{{ .ProjectName }} + - --label=org.opencontainers.image.source=https://github.com/shazow/{{ .ProjectName }} + - --label=org.opencontainers.image.version={{ .Version }} + - --label=org.opencontainers.image.created={{ .Date }} + - --label=org.opencontainers.image.revision={{ .FullCommit }} + - --label=org.opencontainers.image.licenses=MIT + dockerfile: Dockerfile.goreleaser + use: buildx + - image_templates: + - "ghcr.io/shazow/{{ .ProjectName }}:latest-arm64v8" + - "ghcr.io/shazow/{{ .ProjectName }}:{{ .Version }}-arm64v8" + ids: [ssh-chat] + goarch: arm64 + 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/shazow/{{ .ProjectName }} + - --label=org.opencontainers.image.source=https://github.com/shazow/{{ .ProjectName }} + - --label=org.opencontainers.image.version={{ .Version }} + - --label=org.opencontainers.image.created={{ .Date }} + - --label=org.opencontainers.image.revision={{ .FullCommit }} + - --label=org.opencontainers.image.licenses=MIT + dockerfile: Dockerfile.goreleaser + use: buildx + - image_templates: + - "ghcr.io/shazow/{{ .ProjectName }}:latest-arm32v6" + - "ghcr.io/shazow/{{ .ProjectName }}:{{ .Version }}-arm32v6" + ids: [ssh-chat] + goarch: arm + goarm: 6 + build_flag_templates: + - --platform=linux/arm/v6 + - --label=org.opencontainers.image.title={{ .ProjectName }} + - --label=org.opencontainers.image.description={{ .ProjectName }} + - --label=org.opencontainers.image.url=https://github.com/shazow/{{ .ProjectName }} + - --label=org.opencontainers.image.source=https://github.com/shazow/{{ .ProjectName }} + - --label=org.opencontainers.image.version={{ .Version }} + - --label=org.opencontainers.image.created={{ .Date }} + - --label=org.opencontainers.image.revision={{ .FullCommit }} + - --label=org.opencontainers.image.licenses=MIT + dockerfile: Dockerfile.goreleaser + use: buildx + - image_templates: + - "ghcr.io/shazow/{{ .ProjectName }}:latest-arm32v7" + - "ghcr.io/shazow/{{ .ProjectName }}:{{ .Version }}-arm32v7" + ids: [ssh-chat] + goarch: arm + goarm: 7 + build_flag_templates: + - --platform=linux/arm/v7 + - --label=org.opencontainers.image.title={{ .ProjectName }} + - --label=org.opencontainers.image.description={{ .ProjectName }} + - --label=org.opencontainers.image.url=https://github.com/shazow/{{ .ProjectName }} + - --label=org.opencontainers.image.source=https://github.com/shazow/{{ .ProjectName }} + - --label=org.opencontainers.image.version={{ .Version }} + - --label=org.opencontainers.image.created={{ .Date }} + - --label=org.opencontainers.image.revision={{ .FullCommit }} + - --label=org.opencontainers.image.licenses=MIT + dockerfile: Dockerfile.goreleaser + use: buildx + +docker_manifests: + - name_template: ghcr.io/shazow/{{ .ProjectName }}:latest + image_templates: + - ghcr.io/shazow/{{ .ProjectName }}:latest-amd64 + - ghcr.io/shazow/{{ .ProjectName }}:latest-arm64v8 + - ghcr.io/shazow/{{ .ProjectName }}:latest-arm32v7 + - ghcr.io/shazow/{{ .ProjectName }}:latest-arm32v6 + - name_template: ghcr.io/shazow/{{ .ProjectName }}:{{ .Version }} + image_templates: + - ghcr.io/shazow/{{ .ProjectName }}:{{ .Version }}-amd64 + - ghcr.io/shazow/{{ .ProjectName }}:{{ .Version }}-arm64v8 + - ghcr.io/shazow/{{ .ProjectName }}:{{ .Version }}-arm32v7 + - ghcr.io/shazow/{{ .ProjectName }}:{{ .Version }}-arm32v6 + +nfpms: + - maintainer: Andrey Petrov + description: "{{ .ProjectName }}" + homepage: https://github.com/shazow/{{ .ProjectName }} + license: MIT + formats: + - deb + - rpm + +archives: + - id: ssh-chat + builds: + - ssh-chat + format: tar.gz + format_overrides: + - goos: windows + format: zip + files: + - LICENSE* + - README* + - CHANGELOG* + +release: + github: + owner: shazow + name: ssh-chat + ids: [ssh-chat] + prerelease: auto + +changelog: + sort: asc + filters: + exclude: + - '^docs:' + - typo \ No newline at end of file diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 5265a7b..0000000 --- a/Dockerfile +++ /dev/null @@ -1,21 +0,0 @@ -FROM golang:alpine AS builder - -WORKDIR /usr/src/app - -COPY . . -RUN apk add make openssh -RUN make build - - -FROM alpine - -RUN apk add openssh -RUN mkdir /root/.ssh -WORKDIR /root/.ssh -RUN ssh-keygen -t rsa -C "chatkey" -f id_rsa - -WORKDIR /usr/local/bin - -COPY --from=builder /usr/src/app/ssh-chat . -RUN chmod +x ssh-chat -CMD ["/usr/local/bin/ssh-chat"] diff --git a/Dockerfile.goreleaser b/Dockerfile.goreleaser new file mode 100644 index 0000000..9493be3 --- /dev/null +++ b/Dockerfile.goreleaser @@ -0,0 +1,6 @@ +FROM scratch + +COPY ssh-chat /usr/local/bin/ssh-chat +WORKDIR /sshchat + +ENTRYPOINT [ "/usr/local/bin/ssh-chat" ] diff --git a/docker-compose.yml b/docker-compose.yml index 0c9cf64..9f4345f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,15 @@ -version: '3' +version: '3.7' services: - app: - build: . + ssh-chat: + image: ghcr.io/shazow/ssh-chat:latest ports: - 2022:2022 restart: always + volumes: + - ./sshchat:/sshchat + command: + - --verbose + - --identity=id + - --bind=":2022" + - --admin=admins + - --motd=motd