Add self-hosted runners v2 (#4506)
## Issue Addressed NA ## Proposed Changes Carries on from #4115, with the following modifications: 1. Self-hosted runners are only enabled if `github.repository == sigp/lighthouse`. - This allows forks to still have Github-hosted CI. - This gives us a method to switch back to Github-runners if we have extended downtime on self-hosted. 1. Does not remove any existing dependency builds for Github-hosted runners (e.g., installing the latest Rust). 1. Adds the `WATCH_HOST` environment variable which defines where we expect to find the postgres db in the `watch` tests. This should be set to `host.docker.internal` for the tests to pass on self-hosted runners. ## Additional Info NA Co-authored-by: antondlr <anton@delaruelle.net>
This commit is contained in:
parent
fc7f1ba6b9
commit
071dd4cd9c
24
.github/workflows/test-suite.yml
vendored
24
.github/workflows/test-suite.yml
vendored
@ -17,6 +17,10 @@ env:
|
|||||||
PINNED_NIGHTLY: nightly-2023-04-16
|
PINNED_NIGHTLY: nightly-2023-04-16
|
||||||
# Prevent Github API rate limiting.
|
# Prevent Github API rate limiting.
|
||||||
LIGHTHOUSE_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
LIGHTHOUSE_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
# Enable self-hosted runners for the sigp repo only.
|
||||||
|
SELF_HOSTED_RUNNERS: ${{ github.repository == 'sigp/lighthouse' }}
|
||||||
|
# Self-hosted runners need to reference a different host for `./watch` tests.
|
||||||
|
WATCH_HOST: ${{ github.repository == 'sigp/lighthouse' && 'host.docker.internal' || 'localhost' }}
|
||||||
jobs:
|
jobs:
|
||||||
target-branch-check:
|
target-branch-check:
|
||||||
name: target-branch-check
|
name: target-branch-check
|
||||||
@ -48,11 +52,13 @@ jobs:
|
|||||||
run: make cargo-fmt
|
run: make cargo-fmt
|
||||||
release-tests-ubuntu:
|
release-tests-ubuntu:
|
||||||
name: release-tests-ubuntu
|
name: release-tests-ubuntu
|
||||||
runs-on: ubuntu-latest
|
# Use self-hosted runners only on the sigp repo.
|
||||||
|
runs-on: ${{ github.repository == 'sigp/lighthouse' && fromJson('["self-hosted", "linux", "large"]') || 'ubuntu-latest' }}
|
||||||
needs: cargo-fmt
|
needs: cargo-fmt
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- name: Get latest version of stable Rust
|
- name: Get latest version of stable Rust
|
||||||
|
if: env.SELF_HOSTED_RUNNERS == false
|
||||||
run: rustup update stable
|
run: rustup update stable
|
||||||
- name: Install Protoc
|
- name: Install Protoc
|
||||||
uses: arduino/setup-protoc@e52d9eb8f7b63115df1ac544a1376fdbf5a39612
|
uses: arduino/setup-protoc@e52d9eb8f7b63115df1ac544a1376fdbf5a39612
|
||||||
@ -64,11 +70,12 @@ jobs:
|
|||||||
run: make test-release
|
run: make test-release
|
||||||
release-tests-windows:
|
release-tests-windows:
|
||||||
name: release-tests-windows
|
name: release-tests-windows
|
||||||
runs-on: windows-2019
|
runs-on: ${{ github.repository == 'sigp/lighthouse' && fromJson('["self-hosted", "windows"]') || 'windows-2019' }}
|
||||||
needs: cargo-fmt
|
needs: cargo-fmt
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- name: Get latest version of stable Rust
|
- name: Get latest version of stable Rust
|
||||||
|
if: env.SELF_HOSTED_RUNNERS == false
|
||||||
run: rustup update stable
|
run: rustup update stable
|
||||||
- name: Use Node.js
|
- name: Use Node.js
|
||||||
uses: actions/setup-node@v2
|
uses: actions/setup-node@v2
|
||||||
@ -83,6 +90,7 @@ jobs:
|
|||||||
- name: Install make
|
- name: Install make
|
||||||
run: choco install -y make
|
run: choco install -y make
|
||||||
- uses: KyleMayes/install-llvm-action@v1
|
- uses: KyleMayes/install-llvm-action@v1
|
||||||
|
if: env.SELF_HOSTED_RUNNERS == false
|
||||||
with:
|
with:
|
||||||
version: "15.0"
|
version: "15.0"
|
||||||
directory: ${{ runner.temp }}/llvm
|
directory: ${{ runner.temp }}/llvm
|
||||||
@ -92,11 +100,13 @@ jobs:
|
|||||||
run: make test-release
|
run: make test-release
|
||||||
beacon-chain-tests:
|
beacon-chain-tests:
|
||||||
name: beacon-chain-tests
|
name: beacon-chain-tests
|
||||||
runs-on: ubuntu-latest
|
# Use self-hosted runners only on the sigp repo.
|
||||||
|
runs-on: ${{ github.repository == 'sigp/lighthouse' && fromJson('["self-hosted", "linux", "large"]') || 'ubuntu-latest' }}
|
||||||
needs: cargo-fmt
|
needs: cargo-fmt
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- name: Get latest version of stable Rust
|
- name: Get latest version of stable Rust
|
||||||
|
if: env.SELF_HOSTED_RUNNERS == false
|
||||||
run: rustup update stable
|
run: rustup update stable
|
||||||
- name: Install Protoc
|
- name: Install Protoc
|
||||||
uses: arduino/setup-protoc@e52d9eb8f7b63115df1ac544a1376fdbf5a39612
|
uses: arduino/setup-protoc@e52d9eb8f7b63115df1ac544a1376fdbf5a39612
|
||||||
@ -130,11 +140,13 @@ jobs:
|
|||||||
run: make test-slasher
|
run: make test-slasher
|
||||||
debug-tests-ubuntu:
|
debug-tests-ubuntu:
|
||||||
name: debug-tests-ubuntu
|
name: debug-tests-ubuntu
|
||||||
runs-on: ubuntu-22.04
|
# Use self-hosted runners only on the sigp repo.
|
||||||
|
runs-on: ${{ github.repository == 'sigp/lighthouse' && fromJson('["self-hosted", "linux", "large"]') || 'ubuntu-latest' }}
|
||||||
needs: cargo-fmt
|
needs: cargo-fmt
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- name: Get latest version of stable Rust
|
- name: Get latest version of stable Rust
|
||||||
|
if: env.SELF_HOSTED_RUNNERS == false
|
||||||
run: rustup update stable
|
run: rustup update stable
|
||||||
- name: Install Protoc
|
- name: Install Protoc
|
||||||
uses: arduino/setup-protoc@e52d9eb8f7b63115df1ac544a1376fdbf5a39612
|
uses: arduino/setup-protoc@e52d9eb8f7b63115df1ac544a1376fdbf5a39612
|
||||||
@ -160,11 +172,13 @@ jobs:
|
|||||||
run: make run-state-transition-tests
|
run: make run-state-transition-tests
|
||||||
ef-tests-ubuntu:
|
ef-tests-ubuntu:
|
||||||
name: ef-tests-ubuntu
|
name: ef-tests-ubuntu
|
||||||
runs-on: ubuntu-latest
|
# Use self-hosted runners only on the sigp repo.
|
||||||
|
runs-on: ${{ github.repository == 'sigp/lighthouse' && fromJson('["self-hosted", "linux", "small"]') || 'ubuntu-latest' }}
|
||||||
needs: cargo-fmt
|
needs: cargo-fmt
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- name: Get latest version of stable Rust
|
- name: Get latest version of stable Rust
|
||||||
|
if: env.SELF_HOSTED_RUNNERS == false
|
||||||
run: rustup update stable
|
run: rustup update stable
|
||||||
- name: Install Protoc
|
- name: Install Protoc
|
||||||
uses: arduino/setup-protoc@e52d9eb8f7b63115df1ac544a1376fdbf5a39612
|
uses: arduino/setup-protoc@e52d9eb8f7b63115df1ac544a1376fdbf5a39612
|
||||||
|
@ -22,6 +22,7 @@ use watch::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
use log::error;
|
use log::error;
|
||||||
|
use std::env;
|
||||||
use std::net::SocketAddr;
|
use std::net::SocketAddr;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use tokio::{runtime, task::JoinHandle};
|
use tokio::{runtime, task::JoinHandle};
|
||||||
@ -36,6 +37,11 @@ const VALIDATOR_COUNT: usize = 32;
|
|||||||
const SLOTS_PER_EPOCH: u64 = 32;
|
const SLOTS_PER_EPOCH: u64 = 32;
|
||||||
const DEFAULT_TIMEOUT: Duration = Duration::from_secs(5);
|
const DEFAULT_TIMEOUT: Duration = Duration::from_secs(5);
|
||||||
|
|
||||||
|
/// Set this environment variable to use a different hostname for connecting to
|
||||||
|
/// the database. Can be set to `host.docker.internal` for docker-in-docker
|
||||||
|
/// setups.
|
||||||
|
const WATCH_HOST_ENV_VARIABLE: &str = "WATCH_HOST";
|
||||||
|
|
||||||
fn build_test_config(config: &DatabaseConfig) -> PostgresConfig {
|
fn build_test_config(config: &DatabaseConfig) -> PostgresConfig {
|
||||||
let mut postgres_config = PostgresConfig::new();
|
let mut postgres_config = PostgresConfig::new();
|
||||||
postgres_config
|
postgres_config
|
||||||
@ -71,6 +77,10 @@ pub async fn create_test_database(config: &DatabaseConfig) {
|
|||||||
.expect("Database creation failed");
|
.expect("Database creation failed");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_host_from_env() -> String {
|
||||||
|
env::var(WATCH_HOST_ENV_VARIABLE).unwrap_or_else(|_| "localhost".to_string())
|
||||||
|
}
|
||||||
|
|
||||||
struct TesterBuilder {
|
struct TesterBuilder {
|
||||||
pub harness: BeaconChainHarness<EphemeralHarnessType<E>>,
|
pub harness: BeaconChainHarness<EphemeralHarnessType<E>>,
|
||||||
pub config: Config,
|
pub config: Config,
|
||||||
@ -107,6 +117,7 @@ impl TesterBuilder {
|
|||||||
database: DatabaseConfig {
|
database: DatabaseConfig {
|
||||||
dbname: random_dbname(),
|
dbname: random_dbname(),
|
||||||
port: database_port,
|
port: database_port,
|
||||||
|
host: get_host_from_env(),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
server: ServerConfig {
|
server: ServerConfig {
|
||||||
|
Loading…
Reference in New Issue
Block a user