Skip to content

Commit

Permalink
ci: fix arm64 build (#240)
Browse files Browse the repository at this point in the history
* ci: fix arm64 build

Closes #234

* bump version

* remove Dockerfile.arm64

* fix formatting

* fix tags

* remove govulncheck CI job

* remove non-existing flags

* env vars

* Revert "env vars"

This reverts commit 484c67e.

* remove extra description

* only release latest if it's indeed latest tag

* fix lint job

* simplify

* remove outdated comment

* remove unnecessary LD_LIBRARY_PATH

* rename test-fast to test

* build docker on PR

* fix lint issues

* fix arm again

* remove pull_request
  • Loading branch information
melekes authored Feb 12, 2025
1 parent 095dac4 commit ca3ad46
Show file tree
Hide file tree
Showing 14 changed files with 147 additions and 213 deletions.
89 changes: 0 additions & 89 deletions .github/workflows/ci.yml

This file was deleted.

1 change: 0 additions & 1 deletion .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
# supported CodeQL languages.
#
name: "CodeQL"

on:
workflow_dispatch: # allow running workflow manually
push:
Expand Down
1 change: 0 additions & 1 deletion .github/workflows/conventional-pr-title.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
name: "Conventional PR Title"

on:
pull_request_target:
types:
Expand Down
110 changes: 69 additions & 41 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
@@ -1,62 +1,90 @@
# This workflow builds and pushes a new version of the build container image
# when the tools directory changes on main. Edit tools/Dockerfile.
#
# This workflow does not push a new image until it is merged, so tests that
# depend on changes in this image will not pass until this workflow succeeds.
# For that reason, changes here should be done in a separate PR in advance of
# work that depends on them.
#
# To build the test image locally, run:
# make docker-test-image

name: Docker testing image
name: Build Docker Image
on:
workflow_dispatch: # allow running workflow manually
workflow_dispatch:
inputs:
refName:
description: 'Git ref name'
tag:
description: "The tag of the image to build"
required: true
default: 'main'
push:
tags:
- "v[0-9]+.[0-9]+.[0-9]+" # Push events to matching v*, i.e. v1.0, v20.15.10
- "v[0-9]+.[0-9]+.[0-9]+-alpha.[0-9]+" # e.g. v0.37.0-alpha.1, v0.38.0-alpha.10
- "v[0-9]+.[0-9]+.[0-9]+-beta.[0-9]+" # e.g. v0.37.0-beta.1, v0.38.0-beta.10
- "v[0-9]+.[0-9]+.[0-9]+-rc[0-9]+" # e.g. v0.37.0-rc1, v0.38.0-rc10
type: string
is_latest:
description: "Push as latest?"
required: false
default: false
type: boolean

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}

env:
ORG: cometbft
IMAGE_NAME: cometbft-db-testing
GIT_TAG: "${{ inputs.tag }}"

jobs:
build:
runs-on: ubuntu-latest
build-image-at-tag:
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-24.04
platform: linux/amd64
- os: ubuntu-24.04-arm
platform: linux/arm64
runs-on: ${{ matrix.os }}
outputs:
digest-${{ matrix.platform }}: ${{ steps.build.outputs.digest }}
steps:
- uses: actions/checkout@v4
with:
ref: "${{ env.GIT_TAG }}"
fetch-depth: 0

- name: Set up Docker Build
uses: docker/setup-buildx-action@v3.8.0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Login to DockerHub
if: ${{ github.event_name != 'pull_request' }}
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Publish to Docker Hub (amd64)
- name: Build and push image
id: build
uses: docker/build-push-action@v6
with:
context: ./tools
platforms: ${{ matrix.platform }}
file: ./tools/Dockerfile
platforms: linux/amd64
push: true
tags: |
cometbft/cometbft-db-testing:latest
cometbft/cometbft-db-testing:${{ github.event.inputs.refName }}
${{ env.ORG }}/${{ env.IMAGE_NAME }}:${{ env.GIT_TAG }}
push: true

- name: Publish to Docker Hub (arm64)
uses: docker/build-push-action@v6
merge:
runs-on: ubuntu-latest
needs: build-image-at-tag
steps:
- name: Get sanitized Docker tag
run: echo "DOCKER_TAG=$(echo $GIT_TAG | sed 's/[^a-zA-Z0-9\.]/-/g')" >> $GITHUB_ENV

- name: Login to DockerHub
if: ${{ github.event_name != 'pull_request' }}
uses: docker/login-action@v3
with:
context: ./tools
file: ./tools/Dockerfile.arm64
platforms: linux/arm64
push: true
tags: |
cometbft/cometbft-db-testing:latest
cometbft/cometbft-db-testing:${{ github.event.inputs.refName }}
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Create Multi-Arch Manifest
run: |
docker buildx imagetools create \
--tag ${{ env.ORG }}/${{ env.IMAGE_NAME }}:${{ env.DOCKER_TAG }} \
${{ env.ORG }}/${{ env.IMAGE_NAME }}@${{ needs.build-image-at-tag.outputs.digest-linux/amd64 }} \
${{ env.ORG }}/${{ env.IMAGE_NAME }}@${{ needs.build-image-at-tag.outputs.digest-linux/arm64 }}
- name: Tag and Push Latest (if applicable)
if: ${{ inputs.is_latest == true }}
run: |
docker buildx imagetools create \
--tag ${{ env.ORG }}/${{ env.IMAGE_NAME }}:latest \
${{ env.ORG }}/${{ env.IMAGE_NAME }}@${{ needs.build-image-at-tag.outputs.digest-linux/amd64 }} \
${{ env.ORG }}/${{ env.IMAGE_NAME }}@${{ needs.build-image-at-tag.outputs.digest-linux/arm64 }}
37 changes: 0 additions & 37 deletions .github/workflows/govulncheck.yml

This file was deleted.

27 changes: 15 additions & 12 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
name: Lint

on:
pull_request:
merge_group:
Expand All @@ -11,23 +10,27 @@ concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}

env:
ORG: cometbft
IMAGE_NAME: cometbft-db-testing

jobs:
golangci:
# We need to run the linter on the same image we use for building, since it
# needs the C libraries installed for the dependencies to typecheck.
runs-on: ubuntu-latest
container: cometbft/cometbft-db-testing
steps:
- uses: actions/checkout@v4

- run: echo "GO_VERSION=$(cat .github/workflows/go-version.env | grep GO_VERSION | cut -d '=' -f2)" >> $GITHUB_ENV
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- uses: actions/setup-go@v5
- name: Build and load
uses: docker/build-push-action@v6
with:
go-version: ${{ env.GO_VERSION }}
platforms: linux/amd64
file: ./tools/Dockerfile
tags: "${{ env.ORG }}/${{ env.IMAGE_NAME }}:latest"
load: true

- uses: golangci/[email protected]
with:
args: --timeout 10m
version: latest
github-token: ${{ secrets.github_token }}
- name: lint
run: |
NON_INTERACTIVE=1 make docker-lint
48 changes: 48 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: Test
on:
pull_request:
merge_group:
push:
branches:
- main

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}

env:
ORG: cometbft
IMAGE_NAME: cometbft-db-testing

jobs:
test:
strategy:
fail-fast: true
matrix:
include:
- os: ubuntu-24.04
platform: linux/amd64
- os: ubuntu-24.04-arm
platform: linux/arm64
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Build and load
uses: docker/build-push-action@v6
with:
platforms: ${{ matrix.platform }}
file: ./tools/Dockerfile
tags: "${{ env.ORG }}/${{ env.IMAGE_NAME }}:latest"
load: true

- name: test & coverage report creation
run: |
NON_INTERACTIVE=1 make docker-test
- uses: codecov/codecov-action@v4
with:
file: ./coverage.txt
9 changes: 9 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,15 @@ docker-test:
make test-all-with-coverage
.PHONY: docker-test

docker-lint:
@docker run $(DOCKER_TEST_INTERACTIVE_FLAGS) --rm --name cometbft-db-test \
-v `pwd`:/cometbft \
-w /cometbft \
--entrypoint "" \
$(DOCKER_TEST_IMAGE):$(DOCKER_TEST_IMAGE_VERSION) \
make lint
.PHONY: docker-lint

#? tools: Install tools
tools:
go get -v $(GOTOOLS)
Expand Down
2 changes: 2 additions & 0 deletions RELEASES.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,7 @@ DB.
branch.
5. Create a [GitHub release] from the new tag, and include a link from the
description to the heading associated with the new version in the changelog.
6. Build and push the Docker image associated with the new release by running
`Build Docker Image` GH action with the newly created tag `vX.X.X`.

[GitHub release]: https://docs.github.com/en/github/administering-a-repository/releasing-projects-on-github/managing-releases-in-a-repository#creating-a-release
Loading

0 comments on commit ca3ad46

Please sign in to comment.