Files
hub-monorepo/.github/workflows/ci.yml
Shane da Silva ea55abcb83 Add separate Dockerfile for dedicated public image (#962)
We want to make it easier for developers to get started with hubs.

Add a separate optimized Docker image which we'll distribute for both
AMD and ARM architectures.

For now the publishing process is manual, but once hubs are fully open
(no peering allowlists) we'll be able to auto-publish with each hubble
release on NPM.
2023-05-11 20:31:45 -07:00

149 lines
4.6 KiB
YAML

name: CI
on:
# CI is run on main because new branches can only access caches from master, not previous branches.
# So building on master allows new PR's to get the cache from before.
push:
branches: [main]
pull_request:
branches: [main]
# prevent multiple simultaneous test runs
concurrency:
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
cancel-in-progress: true
jobs:
build-test-image:
timeout-minutes: 10
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install Docker buildx
uses: docker/setup-buildx-action@v2
- name: Build Docker image
id: docker-image
uses: docker/build-push-action@v4
with:
cache-from: type=gha
cache-to: type=gha,type=inline
context: .
file: Dockerfile.hubble.test
load: true
tags: farcasterxyz/hubble:test
- name: Run Hubble
shell: bash
run: docker run --name hub --detach -p2282:2282 -p2283:2283 farcasterxyz/hubble:test sh -c 'yarn --cwd=apps/hubble identity create && yarn --cwd=apps/hubble start --rpc-port 2283 --ip 0.0.0.0 --gossip-port 2282 --eth-rpc-url "https://eth-goerli.g.alchemy.com/v2/IvjMoCKt1hT66f9OJoL_dMXypnvQYUdd" --network 3 --allowed-peers none'
- name: Download grpcurl
shell: bash
run: curl -L https://github.com/fullstorydev/grpcurl/releases/download/v1.8.7/grpcurl_1.8.7_linux_x86_64.tar.gz -o - | tar -xzf -
- name: Check that gRPC server is running
uses: nick-fields/retry@v2
with:
timeout_seconds: 10
retry_wait_seconds: 5
max_attempts: 10
shell: bash
command: ./grpcurl -plaintext -import-path protobufs/schemas -proto protobufs/schemas/rpc.proto 127.0.0.1:2283 HubService.GetInfo
on_retry_command: docker logs hub
build-public-image:
timeout-minutes: 10
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: depot/setup-action@v1
- uses: depot/build-push-action@v1
with:
buildx-fallback: true # If Depot fails, try building locally
project: ${{ secrets.DEPOT_PROJECT_ID }}
token: ${{ secrets.DEPOT_TOKEN }}
context: .
file: Dockerfile.hubble
platforms: 'linux/amd64,linux/arm64'
tags: farcasterxyz/hubble:test
load: true # Load into Docker daemon
- name: Run Hubble
shell: bash
run: docker run --name hub --detach -p2282:2282 -p2283:2283 farcasterxyz/hubble:test sh -c 'yarn identity create && yarn start --rpc-port 2283 --ip 0.0.0.0 --gossip-port 2282 --eth-rpc-url "https://eth-goerli.g.alchemy.com/v2/IvjMoCKt1hT66f9OJoL_dMXypnvQYUdd" --network 3 --allowed-peers none'
- name: Download grpcurl
shell: bash
run: curl -L https://github.com/fullstorydev/grpcurl/releases/download/v1.8.7/grpcurl_1.8.7_linux_x86_64.tar.gz -o - | tar -xzf -
- name: Check that gRPC server is running
uses: nick-fields/retry@v2
with:
timeout_seconds: 10
retry_wait_seconds: 5
max_attempts: 10
shell: bash
command: ./grpcurl -plaintext -import-path protobufs/schemas -proto protobufs/schemas/rpc.proto 127.0.0.1:2283 HubService.GetInfo
on_retry_command: docker logs hub
analyze:
timeout-minutes: 10
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- name: Restore cached dependencies for Node modules.
id: module-cache
uses: actions/cache@v3
with:
path: ${{ github.workspace }}/node_modules
key: ${{ runner.os }}--node--${{ hashFiles('**/yarn.lock') }}
- name: Install dependencies
run: yarn install
# - name: Run audit
# run: yarn audit
- name: Run linter
run: yarn lint
test:
timeout-minutes: 10
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- name: Restore cached dependencies for Node modules.
id: module-cache
uses: actions/cache@v3
with:
path: ${{ github.workspace }}/node_modules
key: ${{ runner.os }}--node--${{ hashFiles('**/yarn.lock') }}
- name: Install dependencies
run: yarn install
- name: Run build
run: yarn build
- name: Run tests
run: yarn test:ci
- name: Upload coverage results
uses: codecov/codecov-action@v3