Skip to content
Open
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
208 changes: 208 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,208 @@
name: Build

on:
push:
branches:
- main
paths-ignore:
- '**.md'
- 'docs/**'
pull_request:
paths-ignore:
- '**.md'
- 'docs/**'

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

jobs:
build:
# Skip build if head commit contains 'skip ci'
if: "!contains(github.event.head_commit.message, 'skip ci')"

runs-on: macos-latest
timeout-minutes: 60

steps:
- uses: actions/checkout@v6

- name: Validate Gradle wrapper
uses: gradle/actions/wrapper-validation@v5

- name: Setup JDK
uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 21

- uses: gradle/actions/setup-gradle@v5

- name: Assemble and check
run: ./gradlew check assembleDebug -Pandroidx.baselineprofile.skipgeneration

- name: Run unit tests
run: ./gradlew test -Pandroidx.baselineprofile.skipgeneration

- name: Run androidHostTest tests
run: ./gradlew androidHostTest -Pandroidx.baselineprofile.skipgeneration

- name: Upload reports + Roborazzi outputs
if: failure()
uses: actions/upload-artifact@v7
with:
name: reports
path: |
**/build/reports/**
**/build/outputs/roborazzi/**

detekt:
# Skip if head commit contains 'skip ci'
if: "!contains(github.event.head_commit.message, 'skip ci')"

runs-on: macos-latest
timeout-minutes: 20

steps:
- uses: actions/checkout@v6

- name: Validate Gradle wrapper
uses: gradle/actions/wrapper-validation@v5

- name: Setup JDK
uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 21

- uses: gradle/actions/setup-gradle@v5

- name: Run Detekt
run: ./gradlew detektFull

- name: Upload Detekt reports
if: failure()
uses: actions/upload-artifact@v7
with:
name: detekt-reports
path: '**/build/reports/detekt/**'

konsist:
# Skip if head commit contains 'skip ci'
if: "!contains(github.event.head_commit.message, 'skip ci')"

runs-on: ubuntu-latest
timeout-minutes: 20

steps:
- uses: actions/checkout@v6

- name: Validate Gradle wrapper
uses: gradle/actions/wrapper-validation@v5

- name: Setup JDK
uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 21

- uses: gradle/actions/setup-gradle@v5

- name: Run Konsist tests
run: ./gradlew :konsist:test

- name: Upload Konsist reports
if: failure()
uses: actions/upload-artifact@v7
with:
name: konsist-reports
path: 'konsist/build/reports/tests/**'

device-tests:
# Skip if head commit contains 'skip ci'
if: "!contains(github.event.head_commit.message, 'skip ci')"

runs-on: macos-latest
timeout-minutes: 60

steps:
- uses: actions/checkout@v6

- name: Validate Gradle wrapper
uses: gradle/actions/wrapper-validation@v5

- name: Setup JDK
uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 21

- uses: gradle/actions/setup-gradle@v5

- name: Enable KVM for emulator
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm
sudo chmod 777 /dev/kvm

- name: Run Android Device Tests
uses: reactivecircus/android-emulator-runner@v3
with:
api-level: 33
arch: x86_64
profile: Nexus 6P
script: ./gradlew connectedAndroidDeviceTest -Pandroidx.baselineprofile.skipgeneration

- name: Upload device test reports
if: failure()
uses: actions/upload-artifact@v7
with:
name: device-test-reports
path: |
**/build/reports/**
**/build/outputs/connected-android-test/**

coverage:
# Skip if head commit contains 'skip ci'
if: "!contains(github.event.head_commit.message, 'skip ci')"

runs-on: macos-latest
needs: [ build ]
timeout-minutes: 30
# TODO: Remove continue-on-error once the kover convention plugin is applied to modules
continue-on-error: true

steps:
- uses: actions/checkout@v6

- name: Setup JDK
uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 21

- uses: gradle/actions/setup-gradle@v5

- name: Generate Kover coverage report
run: ./gradlew koverXmlReport

- name: Generate test reports
run: ./gradlew testReport

- name: Upload coverage report
if: success()
uses: actions/upload-artifact@v7
with:
name: coverage-report
path: '**/build/reports/kover/**'

- name: Upload test reports
if: always()
uses: actions/upload-artifact@v7
with:
name: test-reports
path: |
**/build/reports/tests/**
**/test-results/**

26 changes: 26 additions & 0 deletions .github/workflows/close-issues.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: Close inactive issues
on:
schedule:
- cron: "30 1 * * *"
workflow_dispatch:

jobs:
close-issues:
runs-on: ubuntu-latest

permissions:
issues: write
pull-requests: write

steps:
- uses: actions/stale@v10
with:
days-before-issue-stale: 21
days-before-issue-close: 7
stale-issue-label: "stale"
stale-issue-message: "This issue is stale because it has been open for 21 days with no activity."
close-issue-message: "This issue was closed because it has been inactive for 7 days since being marked as stale."
days-before-pr-stale: -1
days-before-pr-close: -1
exempt-issue-assignees: 'MaxMichel2', 'matthiaslao'
exempt-pr-assignees: 'MaxMichel2', 'matthiaslao'
31 changes: 31 additions & 0 deletions .github/workflows/pr-hygiene.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: PR Hygiene

on:
pull_request:
types: [ opened, edited, synchronize, reopened ]

jobs:
semantic-title:
runs-on: ubuntu-latest

permissions:
pull-requests: read

steps:
- uses: amannn/action-semantic-pull-request@v5
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
# Enforce conventional commit types matching the project's Renovate prefix conventions
types: |
feat
fix
docs
chore
refactor
test
ci
perf
build
revert
requireScope: false
115 changes: 115 additions & 0 deletions .github/workflows/publish-docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
name: Publish docs

on:
push:
branches:
- main
tags:
- '*'
pull_request:
workflow_dispatch:

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

permissions:
contents: write
pages: write
id-token: write

jobs:
build_docs:
runs-on: macos-latest
env:
DYLD_FALLBACK_LIBRARY_PATH: /opt/homebrew/lib

steps:
- uses: actions/checkout@v6

- name: Setup JDK
uses: actions/setup-java@v5
with:
distribution: 'zulu'
java-version: 21

- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.x'

- name: Install dependencies
run: |
brew install cairo freetype libffi libjpeg libpng zlib
python3 -m pip install --upgrade pip
python3 -m pip install -r pip-requirements.txt

- uses: gradle/actions/setup-gradle@v5

- name: Build docs
run: ./scripts/build_docs.sh build

- name: Upload docs
uses: actions/upload-artifact@v7
with:
name: docs
retention-days: 1
path: |
docs/

deploy_docs:
runs-on: macos-latest
needs: build_docs
if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch'
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
env:
DYLD_FALLBACK_LIBRARY_PATH: /opt/homebrew/lib

steps:
- uses: actions/checkout@v6

- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.x'

- name: Install dependencies
run: |
brew install cairo freetype libffi libjpeg libpng zlib
python3 -m pip install --upgrade pip
python3 -m pip install -r pip-requirements.txt

- name: Get Docs Version
run: cat gradle.properties | grep --color=never VERSION_NAME >> $GITHUB_OUTPUT
id: version

- name: Download docs builds
uses: actions/download-artifact@v8
with:
name: docs
path: docs

- name: Configure git for mike
run: |
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
git fetch origin gh-pages --depth=1

- name: Deploy dev docs with mike 🗿
if: ${{ success() && contains(steps.version.outputs.VERSION_NAME, 'SNAPSHOT') }}
env:
DEVVIEW_VERSION: "dev"
run: mike deploy -u --push "$DEVVIEW_VERSION"

- name: Deploy release docs with mike 🚀
if: ${{ success() && !contains(steps.version.outputs.VERSION_NAME , 'SNAPSHOT') }}
env:
DEVVIEW_VERSION: ${{ steps.version.outputs.VERSION_NAME }}
run: mike deploy -u --push "$DEVVIEW_VERSION" latest

- name: Delete old doc versions
run: |
git fetch origin gh-pages --depth=1
scripts/delete_old_version_docs.sh
Loading
Loading