Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
version: 2
updates:
- package-ecosystem: github-actions
directory: /
schedule:
interval: weekly
day: monday
time: "05:00"
timezone: America/New_York
open-pull-requests-limit: 10
groups:
github-actions:
patterns: ["*"]

- package-ecosystem: gradle
directory: /android
schedule:
interval: weekly
day: monday
time: "05:30"
timezone: America/New_York
open-pull-requests-limit: 10
groups:
android-dependencies:
patterns: ["*"]
74 changes: 63 additions & 11 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read

env:
CCACHE_DIR: ${{ github.workspace }}/.ccache
CCACHE_MAXSIZE: 500M
Expand All @@ -24,10 +27,10 @@ jobs:

steps:
- name: Check out source
uses: actions/checkout@v4
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

- name: Restore compiler cache
uses: actions/cache@v4
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6
with:
path: .ccache
key: ${{ runner.os }}-${{ github.job }}-ccache-${{ github.sha }}
Expand Down Expand Up @@ -76,7 +79,7 @@ jobs:
name: Fedora build and tests
runs-on: ubuntu-latest
container:
image: fedora:latest
image: fedora:44@sha256:6c75d5bf57cb0fa5aa4b92c6a83c86c791644496d9ac230de7711f5b8ec3b898

steps:
- name: Install dependencies
Expand All @@ -98,10 +101,10 @@ jobs:
zlib-devel

- name: Check out source
uses: actions/checkout@v4
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

- name: Restore compiler cache
uses: actions/cache@v4
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6
with:
path: .ccache
key: ${{ runner.os }}-${{ github.job }}-ccache-${{ github.sha }}
Expand All @@ -123,10 +126,10 @@ jobs:

steps:
- name: Check out source
uses: actions/checkout@v4
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

- name: Restore compiler cache
uses: actions/cache@v4
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6
with:
path: .ccache
key: ${{ runner.os }}-${{ github.job }}-ccache-${{ github.sha }}
Expand Down Expand Up @@ -163,13 +166,59 @@ jobs:
- name: Compiler cache stats
run: ccache --show-stats

protocol-fuzz:
name: Protocol fuzz smoke
runs-on: ubuntu-latest

steps:
- name: Check out source
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

- name: Install dependencies
run: |
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list \
/etc/apt/sources.list.d/azure-cli.list \
/etc/apt/sources.list.d/microsoft*.list || true
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
clang \
libclang-rt-dev \
cmake \
ninja-build \
libx11-dev \
libssl-dev \
pkg-config \
zlib1g-dev

- name: Build fuzz target
env:
CC: clang
CXX: clang++
run: |
cmake -S . -B build-fuzz -G Ninja \
-DBUILD_TESTING=OFF \
-DMWB_ENABLE_FUZZING=ON
cmake --build build-fuzz --target mwb_clipboard_fuzzer --parallel

- name: Fuzz untrusted clipboard and protocol parsers
env:
ASAN_OPTIONS: abort_on_error=1:detect_leaks=1
UBSAN_OPTIONS: halt_on_error=1:print_stacktrace=1
run: |
./build-fuzz/mwb_clipboard_fuzzer \
-dict=tests/fuzz/clipboard.dict \
-max_total_time=30 \
-timeout=5 \
-rss_limit_mb=2048 \
-max_len=1048576

static-checks:
name: Static checks
runs-on: ubuntu-latest

steps:
- name: Check out source
uses: actions/checkout@v4
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

- name: Check trailing whitespace
run: |
Expand Down Expand Up @@ -200,16 +249,19 @@ jobs:

steps:
- name: Check out source
uses: actions/checkout@v4
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

- name: Validate Gradle wrapper integrity
uses: gradle/actions/wrapper-validation@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6

- name: Set up JDK 21
uses: actions/setup-java@v4
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: "21"

- name: Set up Android SDK
uses: android-actions/setup-android@v3
uses: android-actions/setup-android@40fd30fb8d7440372e1316f5d1809ec01dcd3699 # v4

- name: Build release APK, run unit tests, and enforce lint
working-directory: android
Expand Down
97 changes: 97 additions & 0 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
name: CodeQL

on:
push:
branches: [main]
pull_request:
branches: [main]
schedule:
- cron: "23 4 * * 2"
workflow_dispatch:

concurrency:
group: codeql-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read

jobs:
analyze:
name: Analyze (${{ matrix.language }})
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
packages: read
security-events: write
strategy:
fail-fast: false
matrix:
include:
- language: c-cpp
build-mode: manual
- language: java-kotlin
build-mode: manual

steps:
- name: Check out source
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7

- name: Initialize CodeQL
uses: github/codeql-action/init@5595ccaf912efad79be6eef63a5619ff05969be3 # v4
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
queries: security-extended

- name: Install native build dependencies
if: matrix.language == 'c-cpp'
run: |
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list \
/etc/apt/sources.list.d/azure-cli.list \
/etc/apt/sources.list.d/microsoft*.list || true
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
build-essential \
cmake \
ninja-build \
libx11-dev \
libssl-dev \
pkg-config \
zlib1g-dev

- name: Build native targets
if: matrix.language == 'c-cpp'
run: |
cmake -S . -B build-codeql -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo
cmake --build build-codeql --parallel

- name: Validate Gradle wrapper integrity
if: matrix.language == 'java-kotlin'
uses: gradle/actions/wrapper-validation@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6

- name: Set up JDK 21
if: matrix.language == 'java-kotlin'
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5
with:
distribution: temurin
java-version: "21"

- name: Set up Android SDK
if: matrix.language == 'java-kotlin'
uses: android-actions/setup-android@40fd30fb8d7440372e1316f5d1809ec01dcd3699 # v4

- name: Build Android targets
if: matrix.language == 'java-kotlin'
working-directory: android
env:
# CodeQL instrumentation increases compiler memory use. Keep one JVM
# and bounded parallelism so the hosted runner cannot overcommit RAM.
GRADLE_OPTS: -Dorg.gradle.jvmargs=-Xmx4g -Dkotlin.compiler.execution.strategy=in-process
run: ./gradlew :app:assembleRelease --no-daemon --max-workers=2 --stacktrace

- name: Analyze
uses: github/codeql-action/analyze@5595ccaf912efad79be6eef63a5619ff05969be3 # v4
with:
category: /language:${{ matrix.language }}
49 changes: 49 additions & 0 deletions .github/workflows/scorecard.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: Scorecard supply-chain security

on:
branch_protection_rule:
push:
branches: [main]
schedule:
- cron: "41 5 * * 3"
workflow_dispatch:

permissions: read-all

jobs:
analysis:
name: Scorecard analysis
runs-on: ubuntu-latest
if: github.event.repository.default_branch == github.ref_name || github.event_name == 'branch_protection_rule' || github.event_name == 'workflow_dispatch'
permissions:
actions: read
contents: read
id-token: write
security-events: write

steps:
- name: Check out source
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
persist-credentials: false

- name: Run Scorecard analysis
uses: ossf/scorecard-action@2d1146689b8cda280b9bc96326124645441f03bc # v2.4.4
with:
results_file: results.sarif
results_format: sarif
publish_results: true

- name: Upload SARIF artifact
if: always()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: scorecard-sarif
path: results.sarif
retention-days: 14

- name: Upload results to code scanning
if: always()
uses: github/codeql-action/upload-sarif@5595ccaf912efad79be6eef63a5619ff05969be3 # v4
with:
sarif_file: results.sarif
Loading
Loading