feat: add github action #11
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: | |
container_name: ${{ steps.get-ports.outputs.container_name }} | |
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" | |
echo "container_name=${{ env.CONTAINER_NAME }}" >> $GITHUB_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] | |
env: | |
CONTAINER_NAME: yugabyte-${{ github.run_id }}-${{ matrix.test-suite.name }} | |
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: Start YugabyteDB container with dynamic ports | |
id: start-yugabyte | |
run: | | |
# Start YugabyteDB container with dynamic port mapping for PostgreSQL and 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 | |
- name: Get the dynamically assigned ports | |
id: get-ports | |
run: | | |
POSTGRES_PORT=$(docker inspect $CONTAINER_NAME --format='{{(index (index .NetworkSettings.Ports "5433/tcp") 0).HostPort}}') | |
YCQL_PORT=$(docker inspect $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 method to set outputs | |
echo "postgres_port=$POSTGRES_PORT" >> $GITHUB_OUTPUT | |
echo "ycql_port=$YCQL_PORT" >> $GITHUB_OUTPUT | |
- name: Run tests | |
env: | |
CURIO_HARMONYDB_HOSTS: ${{ env.CONTAINER_NAME }} # Use the container's name for DB hosts | |
CURIO_HARMONYDB_PORT: ${{ steps.get-ports.outputs.postgres_port }} # Use the dynamically allocated PostgreSQL port | |
CURIO_INDEXDB_PORT: ${{ steps.get-ports.outputs.ycql_port }} # Use the dynamically allocated YCQL port | |
run: | | |
echo "Using YugabyteDB Container Name: $CURIO_HARMONYDB_HOSTS" | |
echo "Using Postgres Port: $CURIO_HARMONYDB_PORT" | |
echo "Using YCQL Port: $CURIO_INDEXDB_PORT" | |
# Run the tests using the YugabyteDB container | |
go test -v --tags=debug -timeout 30m ${{ matrix.test-suite.target }} | |
- name: Stop YugabyteDB container | |
if: always() # Ensure this runs even if the tests fail | |
run: docker stop ${{ env.CONTAINER_NAME }} | |
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 |