feat: add github action #7
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
branches: | |
- main | |
env: | |
GO_VERSION: 1.22.3 | |
jobs: | |
ci-lint: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Setup Go | |
uses: ./.github/actions/setup-go | |
with: | |
go-version: ${{ env.GO_VERSION }} | |
- name: Install actionlint | |
run: go install github.com/rhysd/actionlint/cmd/actionlint@latest | |
- name: Run actionlint | |
run: actionlint -shellcheck= -pyflakes= | |
setup-params: | |
runs-on: [self-hosted, docker] | |
needs: [ci-lint] | |
steps: | |
- name: Fetch parameters | |
run: lotus fetch-params 8388608 | |
shell: bash | |
build-mainnet: | |
runs-on: ubuntu-latest | |
needs: [ci-lint] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Go | |
uses: ./.github/actions/setup-go | |
with: | |
go-version: ${{ env.GO_VERSION }} | |
- name: Install Dependencies | |
uses: ./.github/actions/install-deps | |
- name: Install FFI | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
run: | | |
make deps | |
shell: bash | |
- name: Build Go | |
run: make build | |
shell: bash | |
build-calibnet: | |
runs-on: ubuntu-latest | |
needs: [ ci-lint ] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Go | |
uses: ./.github/actions/setup-go | |
with: | |
go-version: ${{ env.GO_VERSION }} | |
- name: Install Dependencies | |
uses: ./.github/actions/install-deps | |
- name: Install FFI | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
run: | | |
make deps | |
shell: bash | |
- name: Build Go | |
run: make build | |
shell: bash | |
build-debug: | |
runs-on: ubuntu-latest | |
needs: [ ci-lint ] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Go | |
uses: ./.github/actions/setup-go | |
with: | |
go-version: ${{ env.GO_VERSION }} | |
- name: Install Dependencies | |
uses: ./.github/actions/install-deps | |
- name: Install FFI | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
run: | | |
make deps | |
shell: bash | |
- name: Build Go | |
run: make build | |
shell: bash | |
build-2k: | |
runs-on: ubuntu-latest | |
needs: [ ci-lint ] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Go | |
uses: ./.github/actions/setup-go | |
with: | |
go-version: ${{ env.GO_VERSION }} | |
- name: Install Dependencies | |
uses: ./.github/actions/install-deps | |
- name: Install FFI | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
run: | | |
make deps | |
shell: bash | |
- name: Build Go | |
run: make build | |
shell: bash | |
build-forest: | |
runs-on: ubuntu-latest | |
needs: [ ci-lint ] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Go | |
uses: ./.github/actions/setup-go | |
with: | |
go-version: ${{ env.GO_VERSION }} | |
- name: Install Dependencies | |
uses: ./.github/actions/install-deps | |
- name: Install FFI | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
run: | | |
make deps | |
shell: bash | |
- name: Build Forest | |
run: make forest-test | |
shell: bash | |
# Start YugabyteDB in a separate job with random ports | |
setup-db: | |
runs-on: [ self-hosted, docker ] | |
needs: [ ci-lint ] | |
env: | |
CONTAINER_NAME: yugabyte-${{ github.run_id }} | |
outputs: | |
postgres_port: ${{ steps.get-ports.outputs.postgres_port }} | |
ycql_port: ${{ steps.get-ports.outputs.ycql_port }} | |
steps: | |
- name: Start YugabyteDB with random ports | |
id: start-db | |
run: | | |
# Run YugabyteDB container with random ports for 5433 (Postgres) and 9042 (YCQL) | |
docker run --rm --name ${{ env.CONTAINER_NAME }} -d \ | |
-p 0:5433 -p 0:9042 \ | |
yugabytedb/yugabyte:2024.1.2.0-b77 bin/yugabyted start --daemon=false | |
shell: bash | |
- name: Get the random port bindings | |
id: get-ports | |
run: | | |
# Extract the dynamically assigned ports | |
POSTGRES_PORT=$(docker inspect ${{ env.CONTAINER_NAME }} --format='{{ (index (index .NetworkSettings.Ports "5433/tcp") 0).HostPort }}') | |
YCQL_PORT=$(docker inspect ${{ env.CONTAINER_NAME }} --format='{{ (index (index .NetworkSettings.Ports "9042/tcp") 0).HostPort }}') | |
echo "Postgres is mapped to port: $POSTGRES_PORT" | |
echo "YCQL is mapped to port: $YCQL_PORT" | |
# Use the new syntax to set output | |
echo "postgres_port=$POSTGRES_PORT" >> $GITHUB_OUTPUT | |
echo "ycql_port=$YCQL_PORT" >> $GITHUB_OUTPUT | |
shell: bash | |
- run: | | |
while true; do | |
status=$(docker exec ${{ env.CONTAINER_NAME }} bin/yugabyted status); | |
echo $status; | |
echo $status | grep Running && break; | |
sleep 1; | |
done | |
shell: bash | |
test: | |
runs-on: [self-hosted, docker] | |
needs: [setup-params, setup-db] | |
strategy: | |
matrix: | |
test-suite: | |
- name: test-itest-curio | |
target: "./itests/curio_test.go" | |
- name: test-all | |
target: "`go list ./... | grep -v curio/itests`" | |
- name: test-itest-harmonyDB | |
target: "./itests/harmonydb_test.go" | |
- name: test-itest-alertnow | |
target: "./itests/alertnow_test.go" | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Go | |
uses: ./.github/actions/setup-go | |
with: | |
go-version: ${{ env.GO_VERSION }} | |
- name: Install Dependencies | |
uses: ./.github/actions/install-deps | |
- name: Install FFI | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
run: | | |
make deps | |
shell: bash | |
- name: Run tests | |
run: | | |
echo "Using Postgres Port: $POSTGRES_PORT" | |
echo "Using YCQL Port: $YCQL_PORT" | |
# Pass these port numbers to the test environment or test runner | |
export CURIO_HARMONYDB_HOSTS=${{ env.CONTAINER_NAME }} | |
export CURIO_HARMONYDB_PORT=$POSTGRES_PORT | |
export CURIO_INDEXDB_PORT=$YCQL_PORT | |
go test -v --tags=debug -timeout 30m ${{ matrix.test-suite.target }} | |
shell: bash | |
lint: | |
runs-on: ubuntu-latest | |
needs: [ci-lint] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Go | |
uses: ./.github/actions/setup-go | |
with: | |
go-version: ${{ env.GO_VERSION }} | |
- name: Install Dependencies | |
uses: ./.github/actions/install-deps | |
- name: Install FFI | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
run: | | |
make deps | |
shell: bash | |
- name: Install golangci-lint | |
run: | | |
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.58.1 | |
shell: bash | |
- name: Lint | |
run: | | |
golangci-lint run -v --timeout 15m --concurrency 4 | |
shell: bash | |
gofmt: | |
runs-on: ubuntu-latest | |
needs: [ci-lint] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Go | |
uses: ./.github/actions/setup-go | |
with: | |
go-version: ${{ env.GO_VERSION }} | |
- name: Check gofmt | |
run: | | |
go fmt ./... | |
shell: bash | |
- name: Git diff check | |
run: git --no-pager diff | |
shell: bash | |
- name: Git diff quiet | |
run: git --no-pager diff --quiet | |
shell: bash | |
gen-check: | |
runs-on: ubuntu-latest | |
needs: [ci-lint] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Go | |
uses: ./.github/actions/setup-go | |
with: | |
go-version: ${{ env.GO_VERSION }} | |
- name: Install Dependencies | |
uses: ./.github/actions/install-deps | |
- name: Install goimports | |
run: go install golang.org/x/tools/cmd/goimports | |
shell: bash | |
- name: Install cbor-gen-for | |
run: go install github.com/hannahhoward/cbor-gen-for | |
shell: bash | |
- name: Install FFI | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
run: | | |
make deps | |
shell: bash | |
- name: Generate Code | |
run: make gen | |
shell: bash | |
- name: Git diff check | |
run: git --no-pager diff | |
shell: bash | |
- name: Git diff quiet | |
run: git --no-pager diff --quiet | |
shell: bash | |
mod-tidy-check: | |
runs-on: ubuntu-latest | |
needs: [ci-lint] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Go | |
uses: ./.github/actions/setup-go | |
with: | |
go-version: ${{ env.GO_VERSION }} | |
- name: Install Dependencies | |
uses: ./.github/actions/install-deps | |
- name: Run mod tidy check | |
run: go mod tidy -v | |
shell: bash | |
# Clean up YugabyteDB after all tests | |
cleanup-db: | |
runs-on: [ self-hosted, docker ] | |
needs: [ test ] # Run cleanup after all tests are done | |
env: | |
CONTAINER_NAME: yugabyte-${{ github.run_id }} | |
if: always() # Ensure cleanup runs even if tests fail | |
steps: | |
- name: Stop YugabyteDB | |
run: docker stop ${{ env.CONTAINER_NAME }} | |
shell: bash |