diff --git a/.github/workflows/commitlint.yml b/.github/workflows/commitlint.yml new file mode 100644 index 0000000..64c26c2 --- /dev/null +++ b/.github/workflows/commitlint.yml @@ -0,0 +1,27 @@ +name: Commit Lint + +on: + pull_request: + branches: [main, dev] + +permissions: + contents: read + pull-requests: read + +jobs: + commit-lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: actions/setup-node@v4 + with: + node-version: "22" + + - name: Install commitlint + run: npm install -g @commitlint/cli @commitlint/config-conventional + + - name: Lint commits + run: npx commitlint --from ${{ github.event.pull_request.base.sha }} --to ${{ github.event.pull_request.head.sha }} --verbose diff --git a/.github/workflows/dependency-audit.yml b/.github/workflows/dependency-audit.yml new file mode 100644 index 0000000..0efcad4 --- /dev/null +++ b/.github/workflows/dependency-audit.yml @@ -0,0 +1,37 @@ +name: Dependency Audit + +on: + push: + branches: [main, dev] + pull_request: + branches: [main, dev] + schedule: + - cron: "0 8 1 * *" + +permissions: + contents: read + security-events: write + +jobs: + pip-audit: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: "3.13" + + - name: Install uv + uses: astral-sh/setup-uv@v4 + + - name: Export requirements from uv + run: uv export --no-hashes -o requirements-audit.txt + + - uses: pypa/gh-action-pip-audit@release/v1 + with: + input: requirements-audit.txt + + - name: Cleanup + if: always() + run: rm -f requirements-audit.txt diff --git a/.github/workflows/install-test.yml b/.github/workflows/install-test.yml new file mode 100644 index 0000000..d74a95a --- /dev/null +++ b/.github/workflows/install-test.yml @@ -0,0 +1,72 @@ +name: Install Script Test + +on: + push: + branches: [main, dev] + paths: + - "install.sh" + - "src/window/globalmenu/**" + - "src/window/switcher/app-capture/**" + - "pyproject.toml" + - "uv.lock" + pull_request: + branches: [main, dev] + paths: + - "install.sh" + - "src/window/globalmenu/**" + - "src/window/switcher/app-capture/**" + - "pyproject.toml" + - "uv.lock" + +permissions: + contents: read + +jobs: + syntax-check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Check install.sh syntax + run: bash -n install.sh + + - name: Install shellcheck + run: sudo apt-get install -y shellcheck + + - name: Lint install.sh + run: shellcheck install.sh + + c-build: + runs-on: ubuntu-latest + container: + image: archlinux:latest + steps: + - uses: actions/checkout@v4 + + - name: Install build dependencies + run: | + pacman -Syu --noconfirm gcc make pkgconf gtk3 meson ninja + + - name: Compile globalmenu shim + run: | + gcc -shared -fPIC -O2 -o /tmp/libmenu_button_shim.so \ + src/window/globalmenu/libmenu_button_shim.c \ + $(pkg-config --cflags --libs gtk+-3.0) -ldl + + - name: Compile app-capture + run: | + cd src/window/switcher/app-capture + meson setup builddir --wipe + meson compile -C builddir + + python-compile: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: "3.13" + + - name: Compile all Python source + run: python3 -m compileall -q src