Skip to content

feat: add github action #11

feat: add github action

feat: add github action #11

Workflow file for this run

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