Add Firefox extension web-ext targets
ci / lint-test (push) Successful in 6m5s
ci / build (push) Successful in 6m42s

This commit is contained in:
Joe Julian
2026-04-23 21:51:41 -07:00
parent 2ccd5bc337
commit 2269944702
3 changed files with 90 additions and 2 deletions
+40 -1
View File
@@ -39,6 +39,11 @@ jobs:
distribution: temurin distribution: temurin
java-version: "25" java-version: "25"
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: "22"
- name: Install native build dependencies - name: Install native build dependencies
shell: bash shell: bash
run: | run: |
@@ -47,6 +52,7 @@ jobs:
apt-get update apt-get update
apt-get install -y --no-install-recommends \ apt-get install -y --no-install-recommends \
zsh \ zsh \
python3 \
pkg-config \ pkg-config \
libx11-dev \ libx11-dev \
libx11-xcb-dev \ libx11-xcb-dev \
@@ -58,6 +64,12 @@ jobs:
libxcursor-dev \ libxcursor-dev \
libxfixes-dev libxfixes-dev
- name: Install web-ext
shell: bash
run: |
set -euo pipefail
npm install -g web-ext
- name: Lint - name: Lint
shell: bash shell: bash
run: | run: |
@@ -74,6 +86,12 @@ jobs:
trap 'rm -rf -- "$state_dir"' EXIT trap 'rm -rf -- "$state_dir"' EXIT
KEEPASSGO_STATE_DIR="$state_dir" go test -tags nox11,nowayland,novulkan ./... KEEPASSGO_STATE_DIR="$state_dir" go test -tags nox11,nowayland,novulkan ./...
- name: Firefox extension lint
shell: bash
run: |
set -euo pipefail
make browser-extension-firefox-lint
build: build:
needs: lint-test needs: lint-test
runs-on: keepassgo-android runs-on: keepassgo-android
@@ -92,6 +110,11 @@ jobs:
distribution: temurin distribution: temurin
java-version: "25" java-version: "25"
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: "22"
- name: Install native build dependencies - name: Install native build dependencies
shell: bash shell: bash
run: | run: |
@@ -100,6 +123,7 @@ jobs:
apt-get update apt-get update
apt-get install -y --no-install-recommends \ apt-get install -y --no-install-recommends \
zsh \ zsh \
python3 \
pkg-config \ pkg-config \
libx11-dev \ libx11-dev \
libx11-xcb-dev \ libx11-xcb-dev \
@@ -111,6 +135,12 @@ jobs:
libxcursor-dev \ libxcursor-dev \
libxfixes-dev libxfixes-dev
- name: Install web-ext
shell: bash
run: |
set -euo pipefail
npm install -g web-ext
- name: Prepare dist directory - name: Prepare dist directory
shell: bash shell: bash
run: | run: |
@@ -159,6 +189,13 @@ jobs:
make apk-release RELEASE_SIGNKEY="$signkey_path" RELEASE_SIGNPASS_FILE="$signpass_path" make apk-release RELEASE_SIGNKEY="$signkey_path" RELEASE_SIGNPASS_FILE="$signpass_path"
cp build/keepassgo.apk "${DIST_DIR}/keepassgo.apk" cp build/keepassgo.apk "${DIST_DIR}/keepassgo.apk"
- name: Build Firefox extension
shell: bash
run: |
set -euo pipefail
make browser-extension-firefox-build
cp build/browser-extension/*.zip "${DIST_DIR}/"
- name: Upload CI artifacts - name: Upload CI artifacts
uses: christopherhx/gitea-upload-artifact@v4 uses: christopherhx/gitea-upload-artifact@v4
env: env:
@@ -171,6 +208,7 @@ jobs:
dist/keepassgo-windows-amd64.exe dist/keepassgo-windows-amd64.exe
dist/keepassgo-windows-arm64.exe dist/keepassgo-windows-arm64.exe
dist/keepassgo.apk dist/keepassgo.apk
dist/*.zip
retention-days: 30 retention-days: 30
- name: Publish release artifacts - name: Publish release artifacts
@@ -193,4 +231,5 @@ jobs:
"${DIST_DIR}/keepassgo-linux-amd64" \ "${DIST_DIR}/keepassgo-linux-amd64" \
"${DIST_DIR}/keepassgo-windows-amd64.exe" \ "${DIST_DIR}/keepassgo-windows-amd64.exe" \
"${DIST_DIR}/keepassgo-windows-arm64.exe" \ "${DIST_DIR}/keepassgo-windows-arm64.exe" \
"${DIST_DIR}/keepassgo.apk" "${DIST_DIR}/keepassgo.apk" \
"${DIST_DIR}"/*.zip
+21 -1
View File
@@ -20,6 +20,9 @@ ARCH_PKG_TMPL ?= $(ARCH_PKG_DIR)/PKGBUILD.tmpl
ARCH_PKGBUILD ?= $(ARCH_PKG_DIR)/PKGBUILD ARCH_PKGBUILD ?= $(ARCH_PKG_DIR)/PKGBUILD
ARCH_PKGVER ?= $(shell printf 'r%s.%s' "$$(git rev-list --count HEAD 2>/dev/null || echo 0)" "$$(git rev-parse --short HEAD 2>/dev/null || echo dev)") ARCH_PKGVER ?= $(shell printf 'r%s.%s' "$$(git rev-list --count HEAD 2>/dev/null || echo 0)" "$$(git rev-parse --short HEAD 2>/dev/null || echo dev)")
ARCH_REPO_DIR ?= $(CURDIR) ARCH_REPO_DIR ?= $(CURDIR)
WEB_EXT ?= web-ext
FIREFOX_EXTENSION_DIR ?= build/firefox-extension
FIREFOX_EXTENSION_ARTIFACT_DIR ?= build/browser-extension
GOGIO_SIGN_FLAGS := GOGIO_SIGN_FLAGS :=
ifneq ($(strip $(SIGNKEY)),) ifneq ($(strip $(SIGNKEY)),)
@@ -44,7 +47,7 @@ CONTAINER_SIGNPASSFILE_MOUNT += -v "$(dir $(abspath $(SIGNPASS_FILE))):$(dir $(a
CONTAINER_SIGN_ARGS += SIGNPASS_FILE="$(abspath $(SIGNPASS_FILE))" CONTAINER_SIGN_ARGS += SIGNPASS_FILE="$(abspath $(SIGNPASS_FILE))"
endif endif
.PHONY: apk apk-local apk-release apk-container apk-container-image archlinux-pkgbuild browser-bridge browser-extension-validate .PHONY: apk apk-local apk-release apk-container apk-container-image archlinux-pkgbuild browser-bridge browser-extension-validate browser-extension-firefox-dir browser-extension-firefox-lint browser-extension-firefox-build browser-extension-firefox-run browser-extension-firefox-sign
apk: apk:
@if [ -x "$(JAVA_HOME)/bin/java" ] && "$(JAVA_HOME)/bin/java" -version 2>&1 | grep -q 'version "25'; then \ @if [ -x "$(JAVA_HOME)/bin/java" ] && "$(JAVA_HOME)/bin/java" -version 2>&1 | grep -q 'version "25'; then \
$(MAKE) apk-local JAVA_HOME="$(JAVA_HOME)"; \ $(MAKE) apk-local JAVA_HOME="$(JAVA_HOME)"; \
@@ -132,6 +135,23 @@ archlinux-pkgbuild: $(ARCH_PKG_TMPL) Makefile
browser-bridge: browser-bridge:
go build ./cmd/keepassgo-browser-bridge go build ./cmd/keepassgo-browser-bridge
browser-extension-firefox-dir:
@mkdir -p "$(dir $(FIREFOX_EXTENSION_DIR))"
@python3 scripts/prepare_firefox_extension.py "$(FIREFOX_EXTENSION_DIR)"
browser-extension-firefox-lint: browser-extension-firefox-dir
$(WEB_EXT) lint --source-dir "$(FIREFOX_EXTENSION_DIR)"
browser-extension-firefox-build: browser-extension-firefox-dir
@mkdir -p "$(FIREFOX_EXTENSION_ARTIFACT_DIR)"
$(WEB_EXT) build --source-dir "$(FIREFOX_EXTENSION_DIR)" --artifacts-dir "$(FIREFOX_EXTENSION_ARTIFACT_DIR)"
browser-extension-firefox-run: browser-extension-firefox-dir
$(WEB_EXT) run --source-dir "$(FIREFOX_EXTENSION_DIR)"
browser-extension-firefox-sign: browser-extension-firefox-dir
$(WEB_EXT) sign --source-dir "$(FIREFOX_EXTENSION_DIR)"
browser-extension-validate: browser-extension-validate:
@command -v xvfb-run >/dev/null 2>&1 || { echo "xvfb-run is required"; exit 1; } @command -v xvfb-run >/dev/null 2>&1 || { echo "xvfb-run is required"; exit 1; }
@command -v firefox >/dev/null 2>&1 || { echo "firefox is required"; exit 1; } @command -v firefox >/dev/null 2>&1 || { echo "firefox is required"; exit 1; }
+29
View File
@@ -0,0 +1,29 @@
#!/usr/bin/env python3
import argparse
import json
import shutil
from pathlib import Path
REPO_ROOT = Path(__file__).resolve().parents[1]
SOURCE_DIR = REPO_ROOT / "browser" / "extension"
def main() -> int:
parser = argparse.ArgumentParser(description="Prepare a Firefox extension directory for web-ext.")
parser.add_argument("output_dir", help="directory to write the prepared extension into")
args = parser.parse_args()
output_dir = Path(args.output_dir).resolve()
if output_dir.exists():
shutil.rmtree(output_dir)
shutil.copytree(SOURCE_DIR, output_dir)
manifest = json.loads((output_dir / "manifest.firefox.json").read_text(encoding="utf-8"))
(output_dir / "manifest.json").write_text(json.dumps(manifest, indent=2) + "\n", encoding="utf-8")
return 0
if __name__ == "__main__":
raise SystemExit(main())