This repository has been archived by the owner on Sep 21, 2024. It is now read-only.
feat: Periodic syndication checks to IPFS Kubo #1824
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
on: | |
workflow_dispatch: | |
push: | |
branches: [main] | |
pull_request: | |
name: Run test suite | |
jobs: | |
build-noosphere-apple-artifacts: | |
name: 'Build Noosphere artifacts (Apple)' | |
uses: ./.github/workflows/noosphere_apple_build.yaml | |
with: | |
for-test: true | |
run-test-suite-mac-os-swift: | |
runs-on: macos-12 | |
needs: ['build-noosphere-apple-artifacts'] | |
steps: | |
- uses: actions/checkout@v3 | |
- name: 'Download XCode Framework artifact' | |
uses: actions/download-artifact@v3 | |
with: | |
name: libnoosphere_apple_framework | |
- name: 'Run Swift tests' | |
run: | | |
unzip ./libnoosphere-apple-xcframework.zip | |
sed -i '' -e "s#url: \"[^\"]*\",#path: \"./LibNoosphere.xcframework\"),#" ./Package.swift | |
sed -i '' -e "s#checksum: \"[^\"]*\"),##" ./Package.swift | |
# Enable malloc debugging features | |
# https://developer.apple.com/library/archive/documentation/Performance/Conceptual/ManagingMemory/Articles/MallocDebug.html | |
export MallocPreScribble=1 | |
export MallocScribble=1 | |
swift build --sanitize=address | |
swift test --sanitize=address | |
run-linting-linux: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: Swatinem/rust-cache@v2 | |
- name: 'Setup Rust' | |
run: | | |
curl -sSf https://sh.rustup.rs | sh -s -- -y | |
rustup component add clippy | |
rustup component add rustfmt | |
- name: 'Install environment packages' | |
run: | | |
sudo apt-get update -qqy | |
sudo apt-get install jq protobuf-compiler cmake | |
- name: 'Check Format' | |
run: cargo fmt --all -- --check | |
- name: 'Run Linter' | |
run: cargo clippy --all -- -D warnings | |
run-full-test-suite: | |
strategy: | |
matrix: | |
features: ['test-kubo,headers', 'test-kubo,headers,rocksdb'] | |
platform: ['windows-latest', 'ubuntu-latest'] | |
toolchain: ['stable'] | |
runs-on: ${{ matrix.platform }} | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: Swatinem/rust-cache@v2 | |
- name: 'Setup Rust' | |
run: | | |
curl -sSf https://sh.rustup.rs | sh -s -- -y | |
rustup toolchain install ${{matrix.toolchain}} | |
- name: 'Install environment packages (Windows)' | |
if: ${{ matrix.platform == 'windows-latest' }} | |
run: | | |
choco install -y cmake protoc openssl | |
shell: sh | |
- name: 'Install environment packages (Linux)' | |
if: ${{ matrix.platform == 'ubuntu-latest' }} | |
run: | | |
sudo apt-get update -qqy | |
sudo apt-get install jq protobuf-compiler cmake | |
- name: 'Install IPFS Kubo' | |
uses: ibnesayeed/setup-ipfs@master | |
with: | |
ipfs_version: v0.17.0 | |
run_daemon: true | |
- name: Install cargo-binstall | |
uses: cargo-bins/[email protected] | |
- name: Install binaries from cargo | |
run: | | |
cargo +${{ matrix.toolchain }} binstall cargo-nextest --no-confirm --force | |
- name: 'Run Rust tests' | |
run: cargo +${{ matrix.toolchain }} nextest run --features ${{ matrix.features }} --retries 5 --color always 2>&1 | tee test-results.log | |
env: | |
NOOSPHERE_LOG: academic | |
- name: Parse test results | |
run: | | |
RESULTS_PATH="./test-results.log" | |
csplit -q "$RESULTS_PATH" %^------------% | |
if [[ -f "./xx00" ]]; then | |
SUMMARY=`tail ./xx00 -n+2` | |
if [[ "$SUMMARY" =~ 'FLAKY' ]]; then | |
# See https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings | |
{ | |
echo "summary<<EOF" | |
echo "$SUMMARY" | |
echo "EOF" | |
} >> $GITHUB_OUTPUT | |
fi | |
fi | |
- name: Report test flakes | |
uses: actions/github-script@v6 | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
const { data: comments } = await github.rest.issues.listComments({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
issue_number: context.issue.number, | |
}); | |
const flakeyTestsHeader = 'Test flake analysis (`${{ matrix.platform }}`, `${{ matrix.features }}`, `${{ matrix.toolchain }}`)'; | |
const existingComment = comments.find(comment => { | |
return comment.user.type === 'Bot' && comment.body.includes(flakeyTestsHeader) | |
}); | |
let body; | |
if (`${{ steps['Parse test results'].outputs.summary }}`) { | |
body = `#### 🟡 ${flakeyTestsHeader} | |
Test flakes detected: | |
\`\`\`shell | |
${{ steps['Parse test results'].outputs.summary }} | |
\`\`\` | |
`; | |
} else { | |
body = `#### 🟢 ${flakeyTestsHeader} | |
No flakes detected 🎉 | |
`; | |
} | |
if (existingComment) { | |
github.rest.issues.updateComment({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
comment_id: existingComment.id, | |
body | |
}) | |
} else { | |
github.rest.issues.createComment({ | |
issue_number: context.issue.number, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
body | |
}) | |
} | |
# run-test-suite-linux: | |
# runs-on: ubuntu-latest | |
# steps: | |
# - uses: actions/checkout@v3 | |
# - uses: Swatinem/rust-cache@v2 | |
# - name: 'Setup Rust' | |
# run: | | |
# curl -sSf https://sh.rustup.rs | sh -s -- -y | |
# - name: 'Install environment packages' | |
# run: | | |
# sudo apt-get update -qqy | |
# sudo apt-get install jq protobuf-compiler cmake | |
# - name: Install cargo-binstall | |
# uses: cargo-bins/[email protected] | |
# - name: Install binaries from cargo | |
# run: | | |
# cargo binstall cargo-nextest --no-confirm --force | |
# - name: 'Install IPFS Kubo' | |
# uses: ibnesayeed/setup-ipfs@master | |
# with: | |
# ipfs_version: v0.17.0 | |
# run_daemon: true | |
# - name: 'Run Rust native target tests' | |
# run: cargo nextest run --features test-kubo,headers --retries 5 --color always 2>&1 | tee test-results.log | |
# env: | |
# NOOSPHERE_LOG: academic | |
# - uses: actions/upload-artifact@v3 | |
# with: | |
# name: test-results-linux | |
# path: ./test-results.log | |
# report-test-flakes: | |
# name: 'Report test flakes (Linux)' | |
# needs: ['run-test-suite-linux'] | |
# uses: ./.github/workflows/report_test_flakes.yaml | |
# secrets: inherit | |
# with: | |
# target: 'linux' | |
# run-test-suite-windows: | |
# runs-on: windows-latest | |
# steps: | |
# - uses: actions/checkout@v3 | |
# - uses: Swatinem/rust-cache@v2 | |
# - name: 'Setup Rust' | |
# run: | | |
# curl -sSf https://sh.rustup.rs | sh -s -- -y | |
# - name: 'Install environment packages' | |
# run: | | |
# choco install -y cmake protoc openssl | |
# shell: sh | |
# - name: Install cargo-binstall | |
# uses: cargo-bins/[email protected] | |
# - name: Install binaries from cargo | |
# run: | | |
# cargo binstall cargo-nextest --no-confirm | |
# - name: 'Install IPFS Kubo' | |
# uses: ibnesayeed/setup-ipfs@master | |
# with: | |
# ipfs_version: v0.17.0 | |
# run_daemon: true | |
# - name: 'Run Rust native target tests' | |
# run: cargo nextest run --features test-kubo,headers --retries 5 --color always 2>&1 | tee test-results.log | |
# env: | |
# NOOSPHERE_LOG: academic | |
# run-test-suite-linux-rocksdb: | |
# runs-on: ubuntu-latest | |
# steps: | |
# - uses: actions/checkout@v3 | |
# - uses: Swatinem/rust-cache@v2 | |
# - name: 'Setup Rust' | |
# run: | | |
# curl -sSf https://sh.rustup.rs | sh -s -- -y | |
# - name: 'Install environment packages' | |
# run: | | |
# sudo apt-get update -qqy | |
# sudo apt-get install jq protobuf-compiler cmake libclang-dev | |
# - name: Install cargo-binstall | |
# uses: cargo-bins/[email protected] | |
# - name: Install binaries from cargo | |
# run: | | |
# cargo binstall cargo-nextest --no-confirm --force | |
# - name: 'Install IPFS Kubo' | |
# uses: ibnesayeed/setup-ipfs@master | |
# with: | |
# ipfs_version: v0.17.0 | |
# run_daemon: true | |
# - name: 'Run Rust native target tests (RocksDB)' | |
# run: cargo nextest run --features rocksdb,test-kubo,headers --retries 5 --color always | |
# env: | |
# NOOSPHERE_LOG: academic | |
run-test-suite-linux-c: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: Swatinem/rust-cache@v2 | |
- name: 'Setup Rust' | |
run: | | |
curl -sSf https://sh.rustup.rs | sh -s -- -y | |
- name: 'Install environment packages' | |
run: | | |
sudo apt-get update -qqy | |
sudo apt-get install jq protobuf-compiler cmake make | |
- name: 'Link Noosphere from C' | |
run: | | |
make build -C ./c/example | |
- name: 'Run C integration tests' | |
run: | | |
make run -C ./c/example | |
run-test-suite-web-wasm: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: Swatinem/rust-cache@v2 | |
- name: 'Setup Rust' | |
run: | | |
curl -sSf https://sh.rustup.rs | sh -s -- -y | |
rustup component add clippy | |
rustup component add rustfmt | |
- name: 'Install environment packages' | |
run: | | |
sudo apt-get update -qqy | |
sudo apt-get install jq protobuf-compiler cmake | |
- name: 'Install Rust/WASM test dependencies' | |
run: | | |
rustup target install wasm32-unknown-unknown | |
cargo install toml-cli | |
WASM_BINDGEN_VERSION=`toml get ./Cargo.lock . | jq '.package | map(select(.name == "wasm-bindgen"))[0].version' | xargs echo` | |
cargo install wasm-bindgen-cli --vers "$WASM_BINDGEN_VERSION" | |
shell: bash | |
# See: https://github.com/SeleniumHQ/selenium/blob/5d108f9a679634af0bbc387e7e3811bc1565912b/.github/actions/setup-chrome/action.yml | |
- name: 'Setup Chrome and chromedriver' | |
run: | | |
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - | |
echo "deb http://dl.google.com/linux/chrome/deb/ stable main" | sudo tee -a /etc/apt/sources.list.d/google-chrome.list | |
sudo apt-get update -qqy | |
sudo apt-get -qqy install google-chrome-stable | |
CHROMEDRIVER_URL=$(curl https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json | | |
jq -r '.channels.Stable.downloads.chromedriver | map(select(.platform == "linux64")) | first.url') | |
curl -L -O "$CHROMEDRIVER_URL" | |
unzip chromedriver-linux64.zip | |
pushd ./chromedriver-linux64 | |
chmod +x chromedriver | |
sudo mv chromedriver /usr/local/bin | |
popd | |
chromedriver -version | |
shell: bash | |
- name: 'Run Rust headless browser tests' | |
working-directory: ./rust | |
run: CHROMEDRIVER=/usr/local/bin/chromedriver cargo test --target wasm32-unknown-unknown | |
shell: bash | |
run-test-suite-web-typescript: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: Swatinem/rust-cache@v2 | |
# Disable wireit cache for now, seeing some errors pop up: | |
# https://github.com/subconsciousnetwork/noosphere/actions/runs/4682179827/jobs/8295693844 | |
# - uses: google/wireit@setup-github-actions-caching/v1 | |
- name: 'Setup Rust' | |
run: | | |
curl -sSf https://sh.rustup.rs | sh -s -- -y | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: lts/* | |
- name: 'Install environment packages' | |
run: | | |
sudo apt-get update -qqy | |
sudo apt-get install jq protobuf-compiler cmake | |
- name: 'Install Rust/WASM test dependencies' | |
run: | | |
rustup target install wasm32-unknown-unknown | |
cargo install toml-cli | |
WASM_BINDGEN_VERSION=`toml get ./Cargo.lock . | jq '.package | map(select(.name == "wasm-bindgen"))[0].version' | xargs echo` | |
cargo install wasm-bindgen-cli --vers "$WASM_BINDGEN_VERSION" | |
cargo install wasm-opt --locked | |
shell: bash | |
# See: https://github.com/SeleniumHQ/selenium/blob/5d108f9a679634af0bbc387e7e3811bc1565912b/.github/actions/setup-chrome/action.yml | |
- name: 'Setup Chrome and chromedriver' | |
run: | | |
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - | |
echo "deb http://dl.google.com/linux/chrome/deb/ stable main" | sudo tee -a /etc/apt/sources.list.d/google-chrome.list | |
sudo apt-get update -qqy | |
sudo apt-get -qqy install google-chrome-stable | |
CHROMEDRIVER_URL=$(curl https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json | | |
jq -r '.channels.Stable.downloads.chromedriver | map(select(.platform == "linux64")) | first.url') | |
curl -L -O "$CHROMEDRIVER_URL" | |
unzip chromedriver-linux64.zip | |
pushd ./chromedriver-linux64 | |
chmod +x chromedriver | |
sudo mv chromedriver /usr/local/bin | |
popd | |
chromedriver -version | |
shell: bash | |
- name: 'Install NPM dependencies' | |
working-directory: ./typescript | |
run: npm ci | |
- name: 'Run TypeScript headless browser tests' | |
working-directory: ./typescript | |
run: npm run test |