From d9954fa25ecabb0c557ff52390faf83d38a58bfd Mon Sep 17 00:00:00 2001 From: dan moore Date: Tue, 5 Jul 2022 08:45:42 -0500 Subject: [PATCH] initial commit --- .github/workflows/release.yml | 42 +++++++++++ .gitignore | 4 +- .goreleaser.yml | 132 ++++++++++++++++++++++++++++++++++ Dockerfile.release | 8 +++ Makefile | 35 +++++++++ builder/files/erigon.service | 18 +++++ 6 files changed, 238 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/release.yml create mode 100644 .goreleaser.yml create mode 100644 Dockerfile.release create mode 100644 builder/files/erigon.service diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000000..b5528d10c0a --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,42 @@ +name: Release + +on: + push: + branches-ignore: + - '**' + tags: + - 'v*.*.*' + # to be used by fork patch-releases ^^ + - 'v*.*.*-*' + +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@master + with: + go-version: 1.17.x + + - name: Prepare + id: prepare + run: | + TAG=${GITHUB_REF#refs/tags/} + echo ::set-output name=tag_name::${TAG} + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + + - name: Run GoReleaser + run: | + make release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + VERSION: ${{ steps.prepare.outputs.tag_name }} + SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} + DOCKER_USERNAME: ${{ secrets.DOCKERHUB }} + DOCKER_PASSWORD: ${{ secrets.DOCKERHUB_KEY }} diff --git a/.gitignore b/.gitignore index 36bd64dfef4..369b30fec4b 100644 --- a/.gitignore +++ b/.gitignore @@ -74,4 +74,6 @@ go.work /goerli -docker-compose.*.yml \ No newline at end of file +docker-compose.*.yml + +dist diff --git a/.goreleaser.yml b/.goreleaser.yml new file mode 100644 index 00000000000..1158090360d --- /dev/null +++ b/.goreleaser.yml @@ -0,0 +1,132 @@ +project_name: erigon + +release: + disable: false + draft: true + prerelease: auto + +builds: + - id: darwin-amd64 + main: ./cmd/cli + binary: erigon + goos: + - darwin + goarch: + - amd64 + env: + - CC=o64-clang + - CXX=o64-clang++ + tags: + - netgo + ldflags: + -s -w + + - id: darwin-arm64 + main: ./cmd/cli + binary: erigon + goos: + - darwin + goarch: + - arm64 + env: + - CC=oa64-clang + - CXX=oa64-clang++ + tags: + - netgo + ldflags: + -s -w + + - id: linux-amd64 + main: ./cmd/cli + binary: erigon + goos: + - linux + goarch: + - amd64 + env: + - CC=gcc + - CXX=g++ + tags: + - netgo + ldflags: + # We need to build a static binary because we are building in a glibc based system and running in a musl container + -s -w -extldflags "-static" + + - id: linux-arm64 + main: ./cmd/cli + binary: erigon + goos: + - linux + goarch: + - arm64 + env: + - CC=aarch64-linux-gnu-gcc + - CXX=aarch64-linux-gnu-g++ + tags: + - netgo + ldflags: + # We need to build a static binary because we are building in a glibc based system and running in a musl container + -s -w -extldflags "-static" + +nfpms: + - vendor: 0xPolygon + homepage: https://polygon.technology + maintainer: Polygon Team + description: Polygon Blockchain + license: GPLv3 LGPLv3 + + formats: + - apk + - deb + - rpm + + contents: + - src: builder/files/erigon.service + dst: /lib/systemd/system/erigon.service + type: config + + overrides: + rpm: + replacements: + amd64: x86_64 + +snapshot: + name_template: "{{ .Tag }}.next" + +dockers: + - image_templates: + - 0xpolygon/{{ .ProjectName }}:{{ .Version }}-amd64 + dockerfile: Dockerfile.release + use: buildx + goarch: amd64 + ids: + - linux-amd64 + build_flag_templates: + - --platform=linux/amd64 + + - image_templates: + - 0xpolygon/{{ .ProjectName }}:{{ .Version }}-arm64 + dockerfile: Dockerfile.release + use: buildx + goarch: arm64 + ids: + - linux-arm64 + build_flag_templates: + - --platform=linux/arm64/v8 + +docker_manifests: + - name_template: 0xpolygon/{{ .ProjectName }}:{{ .Version }} + image_templates: + - 0xpolygon/{{ .ProjectName }}:{{ .Version }}-amd64 + - 0xpolygon/{{ .ProjectName }}:{{ .Version }}-arm64 + + - name_template: 0xpolygon/{{ .ProjectName }}:latest + image_templates: + - 0xpolygon/{{ .ProjectName }}:{{ .Version }}-amd64 + - 0xpolygon/{{ .ProjectName }}:{{ .Version }}-arm64 + +announce: + slack: + enabled: true + # The name of the channel that the user selected as a destination for webhook messages. + channel: '#code-releases' diff --git a/Dockerfile.release b/Dockerfile.release new file mode 100644 index 00000000000..85a1cb6651b --- /dev/null +++ b/Dockerfile.release @@ -0,0 +1,8 @@ +FROM alpine:3.14 + +RUN set -x \ + && apk add --update --no-cache \ + ca-certificates \ + && rm -rf /var/cache/apk/* + +EXPOSE 8545 8551 8546 30303 30303/udp 42069 42069/udp 8080 9090 6060 diff --git a/Makefile b/Makefile index 7a0dd3d99d5..e6c1b2fb08c 100644 --- a/Makefile +++ b/Makefile @@ -156,3 +156,38 @@ git-submodules: @# Dockerhub using ./hooks/post-checkout to set submodules, so this line will fail on Dockerhub @git submodule sync --quiet --recursive @git submodule update --quiet --init --recursive --force || true + + +PACKAGE_NAME := github.com/maticnetwork/erigon +GOLANG_CROSS_VERSION ?= v1.18.1 + +.PHONY: release-dry-run +release-dry-run: + @docker run \ + --rm \ + --privileged \ + -e CGO_ENABLED=1 \ + -e GITHUB_TOKEN \ + -e DOCKER_USERNAME \ + -e DOCKER_PASSWORD \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -v `pwd`:/go/src/$(PACKAGE_NAME) \ + -w /go/src/$(PACKAGE_NAME) \ + goreleaser/goreleaser-cross:${GOLANG_CROSS_VERSION} \ + --rm-dist --skip-validate --skip-publish + +.PHONY: release +release: + @docker run \ + --rm \ + --privileged \ + -e CGO_ENABLED=1 \ + -e GITHUB_TOKEN \ + -e DOCKER_USERNAME \ + -e DOCKER_PASSWORD \ + -e SLACK_WEBHOOK \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -v `pwd`:/go/src/$(PACKAGE_NAME) \ + -w /go/src/$(PACKAGE_NAME) \ + goreleaser/goreleaser-cross:${GOLANG_CROSS_VERSION} \ + --rm-dist --skip-validate diff --git a/builder/files/erigon.service b/builder/files/erigon.service new file mode 100644 index 00000000000..601ab08328c --- /dev/null +++ b/builder/files/erigon.service @@ -0,0 +1,18 @@ +[Unit] + Description=erigon + StartLimitIntervalSec=500 + StartLimitBurst=5 + +[Service] + Restart=on-failure + RestartSec=5s + WorkingDirectory=$NODE_DIR + EnvironmentFile=/etc/matic/metadata + ExecStart=/usr/local/bin/erigon $VALIDATOR_ADDRESS + Type=simple + User=$USER + KillSignal=SIGINT + TimeoutStopSec=120 + +[Install] + WantedBy=multi-user.target