From 6c3430858c30a88bab8e3a6beb98088ddebd05f2 Mon Sep 17 00:00:00 2001 From: pk910 Date: Mon, 18 Dec 2023 16:57:57 +0100 Subject: [PATCH] use build workflows from dora --- .github/workflows/_shared-build.yaml | 387 ++++++++++++++++++++++++++ .github/workflows/_shared-check.yaml | 61 ++++ .github/workflows/alpha-releases.yaml | 61 ---- .github/workflows/build-dev.yml | 80 ++++++ .github/workflows/build-master.yml | 186 +++++++++++++ .github/workflows/build-release.yml | 148 ++++++++++ .github/workflows/golangci-lint.yml | 45 --- .github/workflows/goreleaser.yaml | 95 ------- .goreleaser.yaml | 142 ---------- Dockerfile-stub | 10 + goreleaser-debian.Dockerfile | 10 - goreleaser-scratch.Dockerfile | 3 - 12 files changed, 872 insertions(+), 356 deletions(-) create mode 100644 .github/workflows/_shared-build.yaml create mode 100644 .github/workflows/_shared-check.yaml delete mode 100644 .github/workflows/alpha-releases.yaml create mode 100644 .github/workflows/build-dev.yml create mode 100644 .github/workflows/build-master.yml create mode 100644 .github/workflows/build-release.yml delete mode 100644 .github/workflows/golangci-lint.yml delete mode 100644 .github/workflows/goreleaser.yaml delete mode 100644 .goreleaser.yaml create mode 100644 Dockerfile-stub delete mode 100644 goreleaser-debian.Dockerfile delete mode 100644 goreleaser-scratch.Dockerfile diff --git a/.github/workflows/_shared-build.yaml b/.github/workflows/_shared-build.yaml new file mode 100644 index 0000000..d57f6ce --- /dev/null +++ b/.github/workflows/_shared-build.yaml @@ -0,0 +1,387 @@ + +name: Reusable build workflow +on: + workflow_call: + inputs: + ref: + description: 'The branch, tag or SHA to build' + required: true + type: string + release: + description: 'Release version tag for this build' + default: '' + required: false + type: string + docker: + description: 'Build docker images' + default: false + required: true + type: boolean + docker_repository: + description: 'Docker Hub Repository' + default: '' + required: false + type: string + docker_tag_prefix: + description: 'Docker Image Tag Prefix' + default: '' + required: false + type: string + additional_tags: + description: 'Additional Docker Image Tags (JSON)' + default: '' + required: false + type: string + secrets: + DOCKERHUB_USERNAME: + description: 'Docker Hub Username' + required: false + DOCKERHUB_TOKEN: + description: 'Docker Hub Token' + required: false + +# shared build jobs +jobs: + build_linux_amd64_binary: + name: Build linux/amd64 binary + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + ref: ${{ inputs.ref }} + + # setup global dependencies + - name: Set up go + uses: actions/setup-go@v4 + with: + go-version: 1.21.x + + # setup project dependencies + - name: Get dependencies + run: | + go get -v -t -d ./... + + # build binaries + - name: Build linux amd64 binary + run: | + make build + env: + RELEASE: ${{ inputs.release }} + + # upload artifacts + - name: "Upload artifact: assertoor_linux_amd64" + uses: actions/upload-artifact@v3 + with: + path: ./bin/* + name: assertoor_linux_amd64 + + build_linux_arm64_binary: + name: Build linux/arm64 binary + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + ref: ${{ inputs.ref }} + + # setup global dependencies + - name: Set up go + uses: actions/setup-go@v4 + with: + go-version: 1.21.x + + # setup cross build libs + - name: Get cross build dependencies + run: | + sudo apt-get update + sudo apt-get -y install gcc-aarch64-linux-gnu libstdc++-11-dev-arm64-cross libstdc++-12-dev-arm64-cross + + # setup project dependencies + - name: Get dependencies + run: | + go get -v -t -d ./... + + # build binaries + - name: Build linux arm64 binary + run: | + make build GOARCH=arm64 CC=/usr/bin/aarch64-linux-gnu-gcc + env: + RELEASE: ${{ inputs.release }} + + # upload artifacts + - name: "Upload artifact: assertoor_linux_arm64" + uses: actions/upload-artifact@v3 + with: + path: ./bin/* + name: assertoor_linux_arm64 + + build_windows_binary: + name: Build windows/amd64 binary + runs-on: windows-latest + steps: + - uses: actions/checkout@v3 + with: + ref: ${{ inputs.ref }} + + # setup global dependencies + - name: Set up go + uses: actions/setup-go@v4 + with: + go-version: 1.21.x + + # setup project dependencies + - name: Get dependencies + run: | + go get -v -t -d ./... + + # build binaries + - name: Build windows binary + run: | + make build + env: + RELEASE: ${{ inputs.release }} + + # upload artifacts + - name: "Upload artifact: assertoor_windows_amd64" + uses: actions/upload-artifact@v3 + with: + path: ./bin/* + name: assertoor_windows_amd64 + + build_darwin_amd64_binary: + name: Build macos/amd64 binary + runs-on: macos-latest + steps: + - uses: actions/checkout@v3 + with: + ref: ${{ inputs.ref }} + + # setup global dependencies + - name: Set up go + uses: actions/setup-go@v4 + with: + go-version: 1.21.x + + # setup project dependencies + - name: Get dependencies + run: | + go get -v -t -d ./... + + # build binaries + - name: Build macos amd64 binary + run: | + make build + env: + RELEASE: ${{ inputs.release }} + + # upload artifacts + - name: "Upload artifact: assertoor_darwin_amd64" + uses: actions/upload-artifact@v3 + with: + path: ./bin/* + name: assertoor_darwin_amd64 + + build_darwin_arm64_binary: + name: Build macos/arm64 binary + runs-on: macos-latest + steps: + - uses: actions/checkout@v3 + with: + ref: ${{ inputs.ref }} + + # setup global dependencies + - name: Set up go + uses: actions/setup-go@v4 + with: + go-version: 1.21.x + + # setup project dependencies + - name: Get dependencies + run: | + go get -v -t -d ./... + + # build binaries + - name: Build macos arm64 binary + run: | + make build GOARCH=arm64 + env: + RELEASE: ${{ inputs.release }} + + # upload artifacts + - name: "Upload artifact: assertoor_darwin_arm64" + uses: actions/upload-artifact@v3 + with: + path: ./bin/* + name: assertoor_darwin_arm64 + + build_amd64_docker_image: + name: Build amd64 docker image + needs: [build_linux_amd64_binary] + if: ${{ inputs.docker }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + ref: ${{ inputs.ref }} + + - name: Get build version + id: vars + run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT + + # prepare docker + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + # download build artifacts + - name: Download build artifacts + uses: actions/download-artifact@v3 + with: + name: assertoor_linux_amd64 + path: ./bin + + # prepare environment + - name: Prepare build environment + run: | + chmod +x ./bin/* + ls -lach ./bin + + # build amd64 image + - name: Build amd64 docker image + run: | + docker build . --file Dockerfile-stub \ + --tag ${{ inputs.docker_repository }}:${{ inputs.docker_tag_prefix }}-amd64 \ + --tag ${{ inputs.docker_repository }}:${{ inputs.docker_tag_prefix }}-${{ steps.vars.outputs.sha_short }}-amd64 \ + --platform=linux/amd64 + - name: Push amd64 docker images + run: | + docker push ${{ inputs.docker_repository }}:${{ inputs.docker_tag_prefix }}-amd64 + docker push ${{ inputs.docker_repository }}:${{ inputs.docker_tag_prefix }}-${{ steps.vars.outputs.sha_short }}-amd64 + + build_arm64_docker_image: + name: Build arm64 docker image + needs: [build_linux_arm64_binary] + if: ${{ inputs.docker }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + ref: ${{ inputs.ref }} + - name: Get build version + id: vars + run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT + + # prepare docker + - name: Set up Docker QEMU + uses: docker/setup-qemu-action@v2 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + # download build artifacts + - name: Download build artifacts + uses: actions/download-artifact@v3 + with: + name: assertoor_linux_arm64 + path: ./bin + + # prepare environment + - name: Prepare build environment + run: | + chmod +x ./bin/* + ls -lach ./bin + + # build arm64 image + - name: Build arm64 docker image + run: | + docker build . --file Dockerfile-stub \ + --tag ${{ inputs.docker_repository }}:${{ inputs.docker_tag_prefix }}-arm64 \ + --tag ${{ inputs.docker_repository }}:${{ inputs.docker_tag_prefix }}-${{ steps.vars.outputs.sha_short }}-arm64 \ + --platform=linux/arm64 + - name: Push arm64 docker image + run: | + docker push ${{ inputs.docker_repository }}:${{ inputs.docker_tag_prefix }}-arm64 + docker push ${{ inputs.docker_repository }}:${{ inputs.docker_tag_prefix }}-${{ steps.vars.outputs.sha_short }}-arm64 + + build_multiarch_image: + name: Build multiarch docker image + needs: [build_amd64_docker_image, build_arm64_docker_image] + if: ${{ inputs.docker }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + ref: ${{ inputs.ref }} + - name: Get build version + id: vars + run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT + + # prepare docker + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + # build multiarch image + - name: Build multiarch docker manifest + run: | + docker manifest create ${{ inputs.docker_repository }}:${{ inputs.docker_tag_prefix }}-${{ steps.vars.outputs.sha_short }} \ + --amend ${{ inputs.docker_repository }}:${{ inputs.docker_tag_prefix }}-${{ steps.vars.outputs.sha_short }}-amd64 \ + --amend ${{ inputs.docker_repository }}:${{ inputs.docker_tag_prefix }}-${{ steps.vars.outputs.sha_short }}-arm64 + - name: Push multiarch docker manifest + run: | + docker manifest push ${{ inputs.docker_repository }}:${{ inputs.docker_tag_prefix }}-${{ steps.vars.outputs.sha_short }} + + build_extra_image: + name: Build additional docker manifests + needs: [build_multiarch_image] + if: ${{ inputs.additional_tags }} + runs-on: ubuntu-latest + strategy: + matrix: + tag: ${{ fromJSON(inputs.additional_tags) }} + steps: + - uses: actions/checkout@v3 + with: + ref: ${{ inputs.ref }} + - name: Get build version + id: vars + run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT + + # prepare docker + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + # build multiarch image + - name: "Build additional docker manifest: ${{ matrix.tag }}" + run: | + docker manifest create ${{ inputs.docker_repository }}:${{ matrix.tag }}-amd64 \ + --amend ${{ inputs.docker_repository }}:${{ inputs.docker_tag_prefix }}-${{ steps.vars.outputs.sha_short }}-amd64 + + docker manifest create ${{ inputs.docker_repository }}:${{ matrix.tag }}-arm64 \ + --amend ${{ inputs.docker_repository }}:${{ inputs.docker_tag_prefix }}-${{ steps.vars.outputs.sha_short }}-arm64 + + docker manifest create ${{ inputs.docker_repository }}:${{ matrix.tag }} \ + --amend ${{ inputs.docker_repository }}:${{ inputs.docker_tag_prefix }}-${{ steps.vars.outputs.sha_short }}-amd64 \ + --amend ${{ inputs.docker_repository }}:${{ inputs.docker_tag_prefix }}-${{ steps.vars.outputs.sha_short }}-arm64 + + - name: "Push additional docker manifest: ${{ matrix.tag }}" + run: | + docker manifest push ${{ inputs.docker_repository }}:${{ matrix.tag }}-amd64 + docker manifest push ${{ inputs.docker_repository }}:${{ matrix.tag }}-arm64 + docker manifest push ${{ inputs.docker_repository }}:${{ matrix.tag }} \ No newline at end of file diff --git a/.github/workflows/_shared-check.yaml b/.github/workflows/_shared-check.yaml new file mode 100644 index 0000000..c59a0ba --- /dev/null +++ b/.github/workflows/_shared-check.yaml @@ -0,0 +1,61 @@ + +name: Reusable check workflow +on: + workflow_call: + +# shared check jobs +jobs: + check_source: + name: Run code checks + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + # setup global dependencies + - name: Set up go + uses: actions/setup-go@v4 + with: + go-version: 1.21.x + + - name: Verify dependencies + run: go mod verify + + - name: Run go vet + run: go vet ./... + + - name: Check go fmt + run: if [ "$(gofmt -s -l . | wc -l)" -gt 0 ]; then exit 1; fi + + - name: Install staticcheck + run: go install honnef.co/go/tools/cmd/staticcheck@latest + - name: Run staticcheck + run: staticcheck ./... + + + - name: Run golangci-lint + uses: golangci/golangci-lint-action@v3 + with: + # Optional: version of golangci-lint to use in form of v1.2 or v1.2.3 or `latest` to use the latest version + version: latest + + # Optional: working directory, useful for monorepos + # working-directory: somedir + + # Optional: golangci-lint command line arguments. + # args: --issues-exit-code=0 + + # Optional: show only new issues if it's a pull request. The default value is `false`. + # only-new-issues: true + + # Optional: if set to true then the all caching functionality will be complete disabled, + # takes precedence over all other caching options. + # skip-cache: true + + # Optional: if set to true then the action don't cache or restore ~/go/pkg. + # skip-pkg-cache: true + + # Optional: if set to true then the action don't cache or restore ~/.cache/go-build. + # skip-build-cache: true + + - name: Run tests + run: go test -race -vet=off ./... diff --git a/.github/workflows/alpha-releases.yaml b/.github/workflows/alpha-releases.yaml deleted file mode 100644 index 29246fd..0000000 --- a/.github/workflows/alpha-releases.yaml +++ /dev/null @@ -1,61 +0,0 @@ -name: alpha releases - -on: - push: - branches: - - 'release/*' - -jobs: - tag-release: - permissions: - contents: write - runs-on: ubuntu-20.04 - steps: - - name: Checkout - uses: actions/checkout@v3 - with: - fetch-depth: 0 - ref: ${{ github.ref }} - token: ${{ secrets.EPOBOT_TOKEN }} - - name: Get latest release version for this release branch - if: startsWith(github.ref, 'refs/heads/release/') - id: latest_version - run: | - # Extract suffix from branch name (e.g., 'dencun' from 'release/dencun') - RELEASE_SUFFIX=${GITHUB_REF#refs/heads/release/} - - # Fetch all tags and get the latest that matches the pattern - # Using the refs/tags API - LATEST_VERSION=$(curl --silent "https://api.github.com/repos/$GITHUB_REPOSITORY/git/refs/tags" \ - | jq -r --arg suffix "$RELEASE_SUFFIX" '.[] | select(.ref | test("refs/tags/v?[0-9]+\\.[0-9]+\\.[0-9]+-" + $suffix + "$")) | .ref' \ - | sed 's|refs/tags/||' | sort -V | tail -n 1) - echo "Found latest $RELEASE_SUFFIX version: $LATEST_VERSION" - - # Default to 0.0.0 if no matching release was found - if [[ -z "$LATEST_VERSION" ]]; then - LATEST_VERSION="0.0.0" - fi - - # Increment the patch version using bash - LATEST_VERSION=$(echo "$LATEST_VERSION" | awk -F. -v OFS=. '{$NF = $NF + 1;} 1') - - VERSION=$LATEST_VERSION-$RELEASE_SUFFIX - - echo "Releasing version: $VERSION" - - git config --global user.email "ethpandaopsbot@ethereum.org" - git config --global user.name "ethpandaopsbot" - - # Log the short commit SHA - SHORT_COMMIT=$(git rev-parse --short HEAD) - - echo "Git commit: $SHORT_COMMIT" - - git tag -a "$VERSION" -m "Release $VERSION" - - echo "RELEASE_SUFFIX=$RELEASE_SUFFIX" >> $GITHUB_ENV - - # Push the tag - git push origin "$VERSION" - env: - GITHUB_TOKEN: ${{ secrets.EPOBOT_TOKEN }} diff --git a/.github/workflows/build-dev.yml b/.github/workflows/build-dev.yml new file mode 100644 index 0000000..09887e7 --- /dev/null +++ b/.github/workflows/build-dev.yml @@ -0,0 +1,80 @@ + +name: Build DEV version + +on: + pull_request_target: + types: [synchronize] + workflow_dispatch: + inputs: + docker_tag: + description: "Docker Tag Prefix (leave blank for no docker build)" + required: false + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + prinfo: + name: "Get PR info" + runs-on: ubuntu-latest + outputs: + run_builds: ${{ steps.loadinfo.outputs.run_builds }} + commit_ref: ${{ steps.loadinfo.outputs.commit_ref }} + build_docker: ${{ steps.loadinfo.outputs.build_docker }} + docker_tag: ${{ steps.loadinfo.outputs.docker_tag }} + steps: + - name: "Load PR info" + id: loadinfo + run: | + run_builds="true" + + has_docker_image_label="${{ contains(github.event.pull_request.labels.*.name, 'build-docker-image') }}" + echo "docker image label: $has_docker_image_label" + + branch_name="${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" + echo "branch name: $branch_name" + + commit_repo="$GITHUB_REPOSITORY" + commit_ref="${{ github.event.pull_request.head.sha }}" + if [[ -z "$commit_ref" ]]; then + commit_ref="${{ github.sha }}" + fi + + echo "repository: $commit_repo" + echo "commit: $commit_ref" + + manual_tag="${{ inputs.docker_tag }}" + if [[ ! -z "$manual_tag" ]]; then + has_docker_image_label="true" + branch_name="$manual_tag" + fi + + if [[ "$branch_name" == "master" ]] || [[ "$branch_name" =~ ^v[0-9] ]]; then + echo "Invalid branch name! Skipping builds" + run_builds="false" + fi + + echo "run_builds=$run_builds" >> $GITHUB_OUTPUT + echo "commit_ref=$commit_ref" >> $GITHUB_OUTPUT + echo "build_docker=$has_docker_image_label" >> $GITHUB_OUTPUT + echo "docker_tag=$branch_name" >> $GITHUB_OUTPUT + + check_source: + name: "Run code checks" + uses: ./.github/workflows/_shared-check.yaml + + build_binaries: + name: "Build Assertoor" + needs: [prinfo, check_source] + if: ${{ needs.prinfo.outputs.run_builds == 'true' }} + uses: ./.github/workflows/_shared-build.yaml + with: + ref: ${{ needs.prinfo.outputs.commit_ref }} + docker: ${{ needs.prinfo.outputs.build_docker == 'true' }} + docker_repository: "ethpandaops/assertoor" + docker_tag_prefix: ${{needs.prinfo.outputs.docker_tag}} + additional_tags: "['${{needs.prinfo.outputs.docker_tag}}','${{needs.prinfo.outputs.docker_tag}}-latest']" + secrets: + DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} + DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} diff --git a/.github/workflows/build-master.yml b/.github/workflows/build-master.yml new file mode 100644 index 0000000..f4a4683 --- /dev/null +++ b/.github/workflows/build-master.yml @@ -0,0 +1,186 @@ + +name: Build master + +on: + push: + branches: + - 'master' + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + + check_source: + name: "Run code checks" + uses: ./.github/workflows/_shared-check.yaml + + build_binaries: + name: "Build Assertoor" + needs: [check_source] + uses: ./.github/workflows/_shared-build.yaml + with: + ref: ${{ github.sha }} + release: "snapshot" + docker: true + docker_repository: "ethpandaops/assertoor" + docker_tag_prefix: "master" + additional_tags: "['master','master-latest']" + secrets: + DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} + DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} + + create_snapshot_release: + name: Create snapshot release + needs: [build_binaries] + runs-on: ubuntu-latest + steps: + # download build artifacts + - name: "Download build artifacts" + uses: actions/download-artifact@v3 + + # (re)create snapshot binary release + - name: Update snapshot tag & remove previous snapshot release + uses: actions/github-script@v3 + with: + github-token: ${{secrets.GITHUB_TOKEN}} + script: | + try { + var snapshotTag = "snapshot"; + var snapshotRelease = await github.repos.getReleaseByTag({ + owner: context.repo.owner, + repo: context.repo.repo, + tag: snapshotTag + }); + if(snapshotRelease && snapshotRelease.data && snapshotRelease.data.tag_name == snapshotTag) { + console.log("delete previous snapshot release"); + await github.repos.deleteRelease({ + owner: context.repo.owner, + repo: context.repo.repo, + release_id: snapshotRelease.data.id + }); + } + + var snapshotRef = await github.git.getRef({ + owner: context.repo.owner, + repo: context.repo.repo, + ref: "tags/" + snapshotTag + }); + if(snapshotRef && snapshotRef.data && snapshotRef.data.ref) { + if(snapshotRef.data.object.sha !== context.sha) { + await github.git.updateRef({ + owner: context.repo.owner, + repo: context.repo.repo, + ref: "tags/" + snapshotTag, + sha: context.sha, + }); + } + } + else { + await github.git.createRef({ + owner: context.repo.owner, + repo: context.repo.repo, + ref: "tags/" + snapshotTag, + sha: context.sha, + }); + } + } catch (e) { + console.log(e) + } + - name: Create snapshot release + uses: actions/create-release@v1 + id: create_release + with: + draft: false + prerelease: true + release_name: "Dev Snapshot" + tag_name: "snapshot" + body: | + ## Latest automatically built executables. (Unstable development snapshot) + Built from master branch (commit: ${{ github.sha }}) + + Please read the [wiki](https://github.com/ethpandaops/assertoor/wiki) for setup / configuration instructions. + + ### Release Artifacts + | Release File | Description | + | ------------- | ------------- | + | [assertoor_snapshot_windows_amd64.zip](https://github.com/ethpandaops/assertoor/releases/download/snapshot/assertoor_snapshot_windows_amd64.zip) | assertoor executables for windows/amd64 | + | [assertoor_snapshot_linux_amd64.tar.gz](https://github.com/ethpandaops/assertoor/releases/download/snapshot/assertoor_snapshot_linux_amd64.tar.gz) | assertoor executables for linux/amd64 | + | [assertoor_snapshot_linux_arm64.tar.gz](https://github.com/ethpandaops/assertoor/releases/download/snapshot/assertoor_snapshot_linux_arm64.tar.gz) | assertoor executables for linux/arm64 | + | [assertoor_snapshot_darwin_amd64.tar.gz](https://github.com/ethpandaops/assertoor/releases/download/snapshot/assertoor_snapshot_darwin_amd64.tar.gz) | assertoor executable for macos/amd64 | + | [assertoor_snapshot_darwin_arm64.tar.gz](https://github.com/ethpandaops/assertoor/releases/download/snapshot/assertoor_snapshot_darwin_arm64.tar.gz) | assertoor executable for macos/arm64 | + env: + GITHUB_TOKEN: ${{ github.token }} + + # generate & upload release artifacts + - name: "Generate release package: assertoor_snapshot_windows_amd64.zip" + run: | + cd explorer_windows_amd64 + zip -r -q ../assertoor_snapshot_windows_amd64.zip . + - name: "Upload snapshot release artifact: assertoor_snapshot_windows_amd64.zip" + uses: actions/upload-release-asset@v1 + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./assertoor_snapshot_windows_amd64.zip + asset_name: assertoor_snapshot_windows_amd64.zip + asset_content_type: application/octet-stream + env: + GITHUB_TOKEN: ${{ github.token }} + + - name: "Generate release package: assertoor_snapshot_linux_amd64.tar.gz" + run: | + cd explorer_linux_amd64 + tar -czf ../assertoor_snapshot_linux_amd64.tar.gz . + - name: "Upload snapshot release artifact: assertoor_snapshot_linux_amd64.tar.gz" + uses: actions/upload-release-asset@v1 + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./assertoor_snapshot_linux_amd64.tar.gz + asset_name: assertoor_snapshot_linux_amd64.tar.gz + asset_content_type: application/octet-stream + env: + GITHUB_TOKEN: ${{ github.token }} + + - name: "Generate release package: assertoor_snapshot_linux_arm64.tar.gz" + run: | + cd explorer_linux_arm64 + tar -czf ../assertoor_snapshot_linux_arm64.tar.gz . + - name: "Upload snapshot release artifact: assertoor_snapshot_linux_arm64.tar.gz" + uses: actions/upload-release-asset@v1 + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./assertoor_snapshot_linux_arm64.tar.gz + asset_name: assertoor_snapshot_linux_arm64.tar.gz + asset_content_type: application/octet-stream + env: + GITHUB_TOKEN: ${{ github.token }} + + - name: "Generate release package: assertoor_snapshot_darwin_amd64.tar.gz" + run: | + cd explorer_darwin_amd64 + tar -czf ../assertoor_snapshot_darwin_amd64.tar.gz . + - name: "Upload snapshot release artifact: assertoor_snapshot_darwin_amd64.tar.gz" + uses: actions/upload-release-asset@v1 + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./assertoor_snapshot_darwin_amd64.tar.gz + asset_name: assertoor_snapshot_darwin_amd64.tar.gz + asset_content_type: application/octet-stream + env: + GITHUB_TOKEN: ${{ github.token }} + + - name: "Generate release package: assertoor_snapshot_darwin_arm64.tar.gz" + run: | + cd explorer_darwin_arm64 + tar -czf ../assertoor_snapshot_darwin_arm64.tar.gz . + - name: "Upload snapshot release artifact: assertoor_snapshot_darwin_arm64.tar.gz" + uses: actions/upload-release-asset@v1 + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./assertoor_snapshot_darwin_arm64.tar.gz + asset_name: assertoor_snapshot_darwin_arm64.tar.gz + asset_content_type: application/octet-stream + env: + GITHUB_TOKEN: ${{ github.token }} diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml new file mode 100644 index 0000000..9dd5271 --- /dev/null +++ b/.github/workflows/build-release.yml @@ -0,0 +1,148 @@ + +name: Build Release + +on: + workflow_dispatch: + inputs: + version: + description: "Version Number ('0.x.y')" + required: true + +jobs: + build_binaries: + name: "Build Assertoor" + uses: ./.github/workflows/_shared-build.yaml + with: + ref: ${{ github.sha }} + release: "v${{ inputs.version }}" + docker: true + docker_repository: "ethpandaops/assertoor" + docker_tag_prefix: "v${{ inputs.version }}" + additional_tags: "['v${{ inputs.version }}','latest']" + secrets: + DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} + DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} + + create_release: + name: Create Release + needs: [build_binaries] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 100 + ref: ${{ github.sha }} + - name: "Generate release changelog" + id: changelog + run: | + git fetch --tags + prev_tag=$(git tag --sort=-version:refname | grep -e "^v[0-9.]*$" | head -n 1) + echo "previous release: $prev_tag" + if [ "$prev_tag" ]; then + changelog=$(git log --oneline --no-decorate $prev_tag..HEAD) + else + changelog=$(git log --oneline --no-decorate) + fi + echo "changelog<> $GITHUB_OUTPUT + echo " - ${changelog//$'\n'/$'\n' - }" >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT + + # download build artifacts + - name: "Download build artifacts" + uses: actions/download-artifact@v3 + + # create draft release + - name: Create latest release + uses: actions/create-release@v1 + id: create_release + with: + draft: true + prerelease: false + release_name: "v${{ inputs.version }}" + tag_name: "v${{ inputs.version }}" + body: | + ### Changes + ${{ steps.changelog.outputs.changelog }} + + ### Release Artifacts + Please read through the [wiki](https://github.com/ethpandaops/assertoor/wiki) for setup & configuration instructions. + | Release File | Description | + | ------------- | ------------- | + | [assertoor_${{ inputs.version }}_windows_amd64.zip](https://github.com/ethpandaops/assertoor/releases/download/v${{ inputs.version }}/assertoor_${{ inputs.version }}_windows_amd64.zip) | assertoor executables for windows/amd64 | + | [assertoor_${{ inputs.version }}_linux_amd64.tar.gz](https://github.com/ethpandaops/assertoor/releases/download/v${{ inputs.version }}/assertoor_${{ inputs.version }}_linux_amd64.tar.gz) | assertoor executables for linux/amd64 | + | [assertoor_${{ inputs.version }}_linux_arm64.tar.gz](https://github.com/ethpandaops/assertoor/releases/download/v${{ inputs.version }}/assertoor_${{ inputs.version }}_linux_arm64.tar.gz) | assertoor executables for linux/arm64 | + | [assertoor_${{ inputs.version }}_darwin_amd64.tar.gz](https://github.com/ethpandaops/assertoor/releases/download/v${{ inputs.version }}/assertoor_${{ inputs.version }}_darwin_amd64.tar.gz) | assertoor executable for macos/amd64 | + | [assertoor_${{ inputs.version }}_darwin_arm64.tar.gz](https://github.com/ethpandaops/assertoor/releases/download/v${{ inputs.version }}/assertoor_${{ inputs.version }}_darwin_arm64.tar.gz) | assertoor executable for macos/arm64 | + env: + GITHUB_TOKEN: ${{ github.token }} + + # generate & upload release artifacts + - name: "Generate release package: assertoor_${{ inputs.version }}_windows_amd64.zip" + run: | + cd explorer_windows_amd64 + zip -r -q ../assertoor_${{ inputs.version }}_windows_amd64.zip . + - name: "Upload release artifact: assertoor_${{ inputs.version }}_windows_amd64.zip" + uses: actions/upload-release-asset@v1 + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./assertoor_${{ inputs.version }}_windows_amd64.zip + asset_name: assertoor_${{ inputs.version }}_windows_amd64.zip + asset_content_type: application/octet-stream + env: + GITHUB_TOKEN: ${{ github.token }} + + - name: "Generate release package: assertoor_${{ inputs.version }}_linux_amd64.tar.gz" + run: | + cd explorer_linux_amd64 + tar -czf ../assertoor_${{ inputs.version }}_linux_amd64.tar.gz . + - name: "Upload release artifact: assertoor_${{ inputs.version }}_linux_amd64.tar.gz" + uses: actions/upload-release-asset@v1 + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./assertoor_${{ inputs.version }}_linux_amd64.tar.gz + asset_name: assertoor_${{ inputs.version }}_linux_amd64.tar.gz + asset_content_type: application/octet-stream + env: + GITHUB_TOKEN: ${{ github.token }} + + - name: "Generate release package: assertoor_${{ inputs.version }}_linux_arm64.tar.gz" + run: | + cd explorer_linux_arm64 + tar -czf ../assertoor_${{ inputs.version }}_linux_arm64.tar.gz . + - name: "Upload release artifact: assertoor_${{ inputs.version }}_linux_arm64.tar.gz" + uses: actions/upload-release-asset@v1 + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./assertoor_${{ inputs.version }}_linux_arm64.tar.gz + asset_name: assertoor_${{ inputs.version }}_linux_arm64.tar.gz + asset_content_type: application/octet-stream + env: + GITHUB_TOKEN: ${{ github.token }} + + - name: "Generate release package: assertoor_${{ inputs.version }}_darwin_amd64.tar.gz" + run: | + cd explorer_darwin_amd64 + tar -czf ../assertoor_${{ inputs.version }}_darwin_amd64.tar.gz . + - name: "Upload release artifact: assertoor_${{ inputs.version }}_darwin_amd64.tar.gz" + uses: actions/upload-release-asset@v1 + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./assertoor_${{ inputs.version }}_darwin_amd64.tar.gz + asset_name: assertoor_${{ inputs.version }}_darwin_amd64.tar.gz + asset_content_type: application/octet-stream + env: + GITHUB_TOKEN: ${{ github.token }} + + - name: "Generate release package: assertoor_${{ inputs.version }}_darwin_arm64.tar.gz" + run: | + cd explorer_darwin_arm64 + tar -czf ../assertoor_${{ inputs.version }}_darwin_arm64.tar.gz . + - name: "Upload release artifact: assertoor_${{ inputs.version }}_darwin_arm64.tar.gz" + uses: actions/upload-release-asset@v1 + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./assertoor_${{ inputs.version }}_darwin_arm64.tar.gz + asset_name: assertoor_${{ inputs.version }}_darwin_arm64.tar.gz + asset_content_type: application/octet-stream + env: + GITHUB_TOKEN: ${{ github.token }} diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml deleted file mode 100644 index 55ec05c..0000000 --- a/.github/workflows/golangci-lint.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: golangci-lint -on: - push: - tags: - - v* - branches: - - main - pull_request: -permissions: - contents: read - # Optional: allow read access to pull request. Use with `only-new-issues` option. - # pull-requests: read -jobs: - golangci: - name: lint - runs-on: ubuntu-latest - steps: - - uses: actions/setup-go@v3 - with: - go-version: 1.21 - - uses: actions/checkout@v3 - - name: golangci-lint - uses: golangci/golangci-lint-action@v3 - with: - # Optional: version of golangci-lint to use in form of v1.2 or v1.2.3 or `latest` to use the latest version - version: latest - - # Optional: working directory, useful for monorepos - # working-directory: somedir - - # Optional: golangci-lint command line arguments. - # args: --issues-exit-code=0 - - # Optional: show only new issues if it's a pull request. The default value is `false`. - # only-new-issues: true - - # Optional: if set to true then the all caching functionality will be complete disabled, - # takes precedence over all other caching options. - # skip-cache: true - - # Optional: if set to true then the action don't cache or restore ~/go/pkg. - # skip-pkg-cache: true - - # Optional: if set to true then the action don't cache or restore ~/.cache/go-build. - # skip-build-cache: true \ No newline at end of file diff --git a/.github/workflows/goreleaser.yaml b/.github/workflows/goreleaser.yaml deleted file mode 100644 index f8f8e6b..0000000 --- a/.github/workflows/goreleaser.yaml +++ /dev/null @@ -1,95 +0,0 @@ -name: goreleaser - -on: - push: - tags: - - '*' - -jobs: - goreleaser: - permissions: - contents: write - runs-on: - - environment=production - - size=xxlarge - - provider=ethpandaops - - realm=platform - steps: - - name: Checkout - uses: actions/checkout@v3 - with: - fetch-depth: 0 - ref: ${{ github.ref }} - - name: Derive release suffix from tag (if it exists) - run: | - # Strip the 'refs/tags/' prefix - TAG_NAME=${GITHUB_REF#refs/tags/} - - # Extract suffix from tag name after the last '-' (e.g., 'dencun' from 'v1.0.0-dencun') - RELEASE_SUFFIX=${TAG_NAME##*-} - - # Check if the suffix is still a version pattern (e.g., 'v0.0.44'), in which case there's no suffix - if [[ $RELEASE_SUFFIX =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then - RELEASE_SUFFIX="" - fi - - echo "RELEASE_SUFFIX=$RELEASE_SUFFIX" >> $GITHUB_ENV - - echo "Release suffix: $RELEASE_SUFFIX" - - - name: Set up Go - uses: actions/setup-go@v4 - with: - go-version: '1.21' - - uses: actions/setup-node@v3 - name: Set up Node - with: - node-version: 18 - - name: Run apt-get update - run: sudo apt-get update - - name: Install compiler - run: sudo apt-get -y install gcc clang make - - name: Install cross-compiler for linux/arm64 - run: sudo apt-get -y install gcc-aarch64-linux-gnu - - name: Install cross-compiler for windows/amd64 - run: sudo apt-get -y install gcc-mingw-w64-x86-64 - - name: OSXCross for CGO Support - run: | - mkdir ../../osxcross - git clone https://github.com/plentico/osxcross-target.git ../../osxcross/target - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 - - name: Set up Docker Context for Buildx - shell: bash - id: buildx-context - run: | - docker context create builders - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - with: - endpoint: builders - - name: Login to DockerHub - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Update GoReleaser config - run: | - cp .goreleaser.yaml ../.goreleaser.yaml.new - - # If we have a RELEASE_SUFFIX, update the goreleaser config to not set - # the release as the latest - if [[ -n "$RELEASE_SUFFIX" ]]; then - echo "release:" >> ../.goreleaser.yaml.new - echo " prerelease: true" >> ../.goreleaser.yaml.new - echo " make_latest: false" >> ../.goreleaser.yaml.new - fi - - name: Run GoReleaser - uses: goreleaser/goreleaser-action@v4 - with: - distribution: goreleaser - version: latest - args: release --clean --config ../.goreleaser.yaml.new - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - RELEASE_SUFFIX: ${{ env.RELEASE_SUFFIX }} diff --git a/.goreleaser.yaml b/.goreleaser.yaml deleted file mode 100644 index 1409c2d..0000000 --- a/.goreleaser.yaml +++ /dev/null @@ -1,142 +0,0 @@ -project_name: assertoor - -before: - hooks: - - go mod tidy - - go generate ./... -builds: - - env: - - CGO_ENABLED=1 - binary: assertoor-{{.Version}} - goos: - - linux - - windows - - darwin - - goarch: - - amd64 - - arm64 - goarm: - - 6 - - 7 - ignore: - - goarch: 386 - # broken with go-ethereum github.com/prometheus/tsdb module - - goos: windows - goarch: arm64 - mod_timestamp: "{{ .CommitTimestamp }}" - ldflags: - - -s -w -X github.com/ethpandaops/assertoor/pkg/coordinator/buildinfo.BuildRelease={{.Tag}} -X github.com/ethpandaops/assertoor/pkg/coordinator/buildinfo.BuildVersion={{.ShortCommit}} - overrides: - - goos: linux - goarch: arm64 - env: - - CC=aarch64-linux-gnu-gcc - - goos: darwin - goarch: amd64 - goamd64: v1 - env: - - CC=/home/runner/work/osxcross/target/bin/o64-clang - - CXX=/home/runner/work/osxcross/target/bin/o64-clang++ - - goos: darwin - goarch: arm64 - env: - - CC=/home/runner/work/osxcross/target/bin/o64-clang - - CXX=/home/runner/work/osxcross/target/bin/o64-clang++ - - goos: windows - goarch: amd64 - goamd64: v1 - env: - - CC=x86_64-w64-mingw32-cpp -checksum: - name_template: 'checksums.txt' -snapshot: - name_template: "{{ incpatch .Version }}-next" -changelog: - sort: asc - filters: - exclude: - - '^docs:' - - '^test:' - -dockers: - ## Scratch - - use: buildx - goos: linux - goarch: amd64 - dockerfile: goreleaser-scratch.Dockerfile - image_templates: - - "ethpandaops/{{ .ProjectName }}:{{ .Version }}-amd64" - - "ethpandaops/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}latest-amd64" - 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}}" - - use: buildx - goos: linux - goarch: arm64 - dockerfile: goreleaser-scratch.Dockerfile - image_templates: - - "ethpandaops/{{ .ProjectName }}:{{ .Version }}-arm64v8" - - "ethpandaops/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}latest-arm64v8" - build_flag_templates: - - "--platform=linux/arm64/v8" - - "--label=org.opencontainers.image.created={{.Date}}" - - "--label=org.opencontainers.image.title={{.ProjectName}}" - - "--label=org.opencontainers.image.revision={{.FullCommit}}" - - "--label=org.opencontainers.image.version={{.Version}}" - ## Debian - - use: buildx - goos: linux - goarch: amd64 - dockerfile: goreleaser-debian.Dockerfile - image_templates: - - "ethpandaops/{{ .ProjectName }}:{{ .Version }}-debian-amd64" - - "ethpandaops/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}debian-latest-amd64" - 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}}" - - use: buildx - goos: linux - goarch: arm64 - dockerfile: goreleaser-debian.Dockerfile - image_templates: - - "ethpandaops/{{ .ProjectName }}:{{ .Version }}-debian-arm64v8" - - "ethpandaops/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}debian-latest-arm64v8" - build_flag_templates: - - "--platform=linux/arm64/v8" - - "--label=org.opencontainers.image.created={{.Date}}" - - "--label=org.opencontainers.image.title={{.ProjectName}}" - - "--label=org.opencontainers.image.revision={{.FullCommit}}" - - "--label=org.opencontainers.image.version={{.Version}}" -docker_manifests: - ## Scratch - - name_template: ethpandaops/{{ .ProjectName }}:{{ .Version }} - image_templates: - - ethpandaops/{{ .ProjectName }}:{{ .Version }}-amd64 - - ethpandaops/{{ .ProjectName }}:{{ .Version }}-arm64v8 - - name_template: ethpandaops/{{ .ProjectName }}:{{ .Version }}-arm64 - image_templates: - - ethpandaops/{{ .ProjectName }}:{{ .Version }}-arm64v8 - - name_template: ethpandaops/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}latest - image_templates: - - ethpandaops/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}latest-amd64 - - ethpandaops/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}latest-arm64v8 - - ## Debian - - name_template: ethpandaops/{{ .ProjectName }}:{{ .Version }}-debian - image_templates: - - ethpandaops/{{ .ProjectName }}:{{ .Version }}-debian-amd64 - - ethpandaops/{{ .ProjectName }}:{{ .Version }}-debian-arm64v8 - - name_template: ethpandaops/{{ .ProjectName }}:{{ .Version }}-debian-arm64 - image_templates: - - ethpandaops/{{ .ProjectName }}:{{ .Version }}-debian-arm64v8 - - name_template: ethpandaops/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}debian-latest - image_templates: - - ethpandaops/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}debian-latest-amd64 - - ethpandaops/{{ .ProjectName }}:{{ if .Env.RELEASE_SUFFIX }}{{ .Env.RELEASE_SUFFIX }}-{{ end }}debian-latest-arm64v8 diff --git a/Dockerfile-stub b/Dockerfile-stub new file mode 100644 index 0000000..816e3e7 --- /dev/null +++ b/Dockerfile-stub @@ -0,0 +1,10 @@ + +# final stage +FROM debian:stable-slim +WORKDIR /app +RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && apt-get clean && rm -rf /var/lib/apt/lists/* +RUN update-ca-certificates +COPY bin/* /app +EXPOSE 8080 +ENTRYPOINT ["./assertoor"] +CMD [] diff --git a/goreleaser-debian.Dockerfile b/goreleaser-debian.Dockerfile deleted file mode 100644 index 49cd94b..0000000 --- a/goreleaser-debian.Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM debian:latest -RUN apt-get update && apt-get -y upgrade -RUN apt-get install -y --no-install-recommends \ - libssl-dev \ - procps \ - ca-certificates \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* -COPY assertoor* /assertoor -ENTRYPOINT ["/assertoor"] diff --git a/goreleaser-scratch.Dockerfile b/goreleaser-scratch.Dockerfile deleted file mode 100644 index a1a7ca4..0000000 --- a/goreleaser-scratch.Dockerfile +++ /dev/null @@ -1,3 +0,0 @@ -FROM gcr.io/distroless/static-debian11:latest -COPY assertoor* /assertoor -ENTRYPOINT ["/assertoor"]