Skip to content

Commit

Permalink
CI
Browse files Browse the repository at this point in the history
  • Loading branch information
javdl committed Jan 2, 2025
1 parent e49dce8 commit ab16706
Showing 1 changed file with 357 additions and 0 deletions.
357 changes: 357 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,357 @@
# SPDX-FileCopyrightText: 2021-2022 Eduardo Robles <[email protected]>
# SPDX-FileCopyrightText: 2022 Félix Robles <[email protected]>
#
# SPDX-License-Identifier: AGPL-3.0-only

name: CI

on:
push:

jobs:
test:
name: Run unit tests
strategy:
matrix:
os: [ubuntu-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/[email protected]
- uses: cachix/install-nix-action@v17
with:
install_url: https://github.com/numtide/nix-unstable-installer/releases/download/nix-2.10.0pre20220629_b7eb4ac/install
nix_path: nixpkgs=channel:nixos-22.05
extra_nix_config: |
experimental-features = nix-command flakes
- uses: cachix/cachix-action@v10
with:
name: sequentech
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'

- name: Run unit tests
run: |
nix \
--extra-experimental-features "nix-command flakes" \
develop \
--command bash -c "cargo test"
check:
name: 'Static Analysis: cargo check'
strategy:
matrix:
os: [ubuntu-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/[email protected]
- uses: cachix/install-nix-action@v17
with:
install_url: https://github.com/numtide/nix-unstable-installer/releases/download/nix-2.10.0pre20220629_b7eb4ac/install
nix_path: nixpkgs=channel:nixos-22.05
extra_nix_config: |
experimental-features = nix-command flakes
- uses: cachix/cachix-action@v10
with:
name: sequentech
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'

- name: Run cargo check
run: |
nix \
--extra-experimental-features "nix-command flakes" \
develop \
--command bash -c "cargo check"
lints:
name: 'Static Analysis: cargo fmt & clippy'
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2

- name: Install stable toolchain
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
components: rustfmt, clippy

- uses: Swatinem/rust-cache@v1

- name: Install extra dependencies
run: cargo install clippy-sarif sarif-fmt

- name: Check code styling with cargo fmt
uses: actions-rs/cargo@v1
with:
command: fmt
args: --all -- --check

- name: Run cargo clippy
run:
cargo clippy
--message-format=json
-- -D warnings | clippy-sarif | tee rust-clippy-results.sarif | sarif-fmt
continue-on-error: true

- name: Upload analysis results to GitHub
uses: github/codeql-action/upload-sarif@v2
with:
sarif_file: rust-clippy-results.sarif
wait-for-processing: true
category: cargo-clippy

# based on https://github.com/actions-rs/example
coverage:
name: Test Coverage
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2

- name: Install stable toolchain
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true

- uses: Swatinem/rust-cache@v1

- name: Run cargo-tarpaulin
uses: actions-rs/[email protected]
continue-on-error: true
with:
version: '0.15.0'
args: '-- --test-threads 4'

- uses: codecov/codecov-action@v3
with:
fail_ci_if_error: True
verbose: true

- name: Archive code coverage results
uses: actions/upload-artifact@v1
with:
name: code-coverage-report
path: cobertura.xml

dependencies:
name: Check Dependencies
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2

- uses: Swatinem/rust-cache@v1

- name: Run cargo deny
uses: EmbarkStudios/cargo-deny-action@v1
with:
log-level: warn
command: check
arguments: --all-features

license_reuse:
name: Code License
strategy:
matrix:
os: [ubuntu-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/[email protected]
- uses: cachix/install-nix-action@v17
with:
install_url: https://github.com/numtide/nix-unstable-installer/releases/download/nix-2.10.0pre20220629_b7eb4ac/install
nix_path: nixpkgs=channel:nixos-22.05
extra_nix_config: |
experimental-features = nix-command flakes
- uses: cachix/cachix-action@v10
with:
name: sequentech
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'

- name: Check files license compliance with REUSE
run: |
nix \
--extra-experimental-features "nix-command flakes" \
develop \
--command bash -c "reuse lint"
benchmark:
name: Benchmark
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2

- name: Install stable toolchain
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: nightly
override: true

- uses: Swatinem/rust-cache@v1

- name: Run cargo bench
# note that we explictly have to mention which benches to run, because
# otherwise
run:
cargo +nightly bench
--bench shuffle
--bench encrypt
-- --output-format bencher | tee output.txt

- name: Download previous benchmark data
uses: actions/cache@v3
with:
path: ./cache
key: cargo-bench

- name: Store benchmark result
uses: benchmark-action/github-action-benchmark@v1
with:
name: cargo-bench
tool: 'cargo'
output-file-path: ./output.txt
github-token: ${{ secrets.GITHUB_TOKEN }}
external-data-json-path: ./cache/benchmark-data.json
alert-threshold: '150%'
comment-on-alert: true
fail-on-alert: false

nix_flake_info:
name: Register Nix Flake Information
strategy:
matrix:
os: [ubuntu-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/[email protected]
- uses: cachix/install-nix-action@v17
with:
install_url: https://github.com/numtide/nix-unstable-installer/releases/download/nix-2.10.0pre20220629_b7eb4ac/install
nix_path: nixpkgs=channel:nixos-22.05
extra_nix_config: |
experimental-features = nix-command flakes
- uses: cachix/cachix-action@v10
with:
name: sequentech
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'

# not running this command in https://github.com/nektos/act
# why? because it doesn't work for some reason
- name: Print nixpkgs version
if: ${{ !env.ACT }}
run: nix-instantiate --eval -E '(import <nixpkgs> {}).lib.version'

- name: Show flake
run: nix --extra-experimental-features "nix-command flakes" flake show

# in all these nix command we add again the --extra-experimental-features
# because apparently otherwise it doesn't work with
# https://github.com/nektos/act
- name: Show flake metadata
run: nix --extra-experimental-features "nix-command flakes" flake metadata

- name: Run flake check
run: nix --extra-experimental-features "nix-command flakes" flake check

nix_flake_build:
name: Build Nix Flake
strategy:
matrix:
os: [ubuntu-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/[email protected]
- uses: cachix/install-nix-action@v17
with:
install_url: https://github.com/numtide/nix-unstable-installer/releases/download/nix-2.10.0pre20220629_b7eb4ac/install
nix_path: nixpkgs=channel:nixos-22.05
extra_nix_config: |
experimental-features = nix-command flakes
- uses: cachix/cachix-action@v10
with:
name: sequentech
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'

- name: Build the flake
run: nix --extra-experimental-features "nix-command flakes" build -L

browserstack_test:
name: Browserstack tests
strategy:
matrix:
os: [ubuntu-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/[email protected]
- uses: cachix/install-nix-action@v17
with:
install_url: https://github.com/numtide/nix-unstable-installer/releases/download/nix-2.10.0pre20220629_b7eb4ac/install
nix_path: nixpkgs=channel:nixos-22.05
extra_nix_config: |
experimental-features = nix-command flakes
- uses: cachix/cachix-action@v10
with:
name: sequentech
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'

- name: Build the flake
run: nix --extra-experimental-features "nix-command flakes" build -L

- name: Extract wasm files
run: |
tar -xf result/strand-*.tgz
mv package pkg
- name: Set up Python 3.8
uses: actions/setup-python@v2
with:
python-version: 3.8

- uses: actions/setup-node@v3
with:
node-version: 18

- name: 'Building web application to be tested'
run: cd browserstack && npm ci

# https://www.browserstack.com/docs/automate/selenium/github-actions#sample-github-workflow-showing-a-browserstack-test
- name: 'BrowserStack Env Setup' # Invokes the setup-env action
uses: browserstack/github-actions/setup-env@master
with:
username: ${{ secrets.BROWSERSTACK_USERNAME }}
access-key: ${{ secrets.BROWSERSTACK_ACCESS_KEY }}

- name: 'BrowserStack Local Tunnel Setup' # Invokes the setup-local action
uses: browserstack/github-actions/setup-local@master
with:
local-testing: start
local-identifier: random

- name: 'Run local server to serve browserstack tests'
run: python3 src/wasm/test/serve.py &

- name: 'Running test on BrowserStack' # Invokes the actual test script that would run on BrowserStack browsers
env:
GIT_COMMIT_SHA: ${{ github.sha }}
run: |
cd browserstack && \
GIT_COMMIT_SHA=$GIT_COMMIT_SHA \
BROWSERSTACK_USERNAME=$BROWSERSTACK_USERNAME \
BROWSERSTACK_ACCESS_KEY=$BROWSERSTACK_ACCESS_KEY \
npm run local
- name: 'BrowserStackLocal Stop' # Terminating the BrowserStackLocal tunnel connection
uses: browserstack/github-actions/setup-local@master
with:
local-testing: stop

0 comments on commit ab16706

Please sign in to comment.