diff --git a/.github/workflows/extension-release.yml b/.github/workflows/extension-release.yml new file mode 100644 index 0000000..b075b50 --- /dev/null +++ b/.github/workflows/extension-release.yml @@ -0,0 +1,96 @@ +name: Build extension + +on: + push: + branches: [main] + paths-ignore: + - 'server/**' + - '.github/workflows/signaling-image.yml' + - '**/*.md' + - '.idea/**' + - '.gitignore' + - 'LICENSE' + workflow_dispatch: + inputs: + official: + description: 'Publish an official versioned release (otherwise latest build)' + type: boolean + default: false + prerelease: + description: 'If official, mark it as a pre-release' + type: boolean + default: false + +permissions: {} + +concurrency: + group: extension-build-${{ github.ref }} + cancel-in-progress: true + +jobs: + build: + runs-on: ubuntu-latest + permissions: + contents: read + outputs: + version: ${{ steps.version.outputs.value }} + steps: + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + persist-credentials: false + + - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version: 22 + + - run: node tools/check-locales.mjs + + - id: version + run: echo "value=$(node -p "require('./extension/manifest.json').version")" >> "$GITHUB_OUTPUT" + + - name: Package the extension + run: | + (cd extension && zip -qr ../offmic.zip .) + sha256sum offmic.zip > offmic.zip.sha256 + unzip -l offmic.zip + + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + with: + name: extension + path: | + offmic.zip + offmic.zip.sha256 + if-no-files-found: error + + release: + needs: build + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 + with: + path: dist + merge-multiple: true + + - env: + GH_TOKEN: ${{ github.token }} + GH_REPO: ${{ github.repository }} + VERSION: ${{ needs.build.outputs.version }} + RUN_NUMBER: ${{ github.run_number }} + OFFICIAL: ${{ github.event_name == 'workflow_dispatch' && inputs.official }} + PRERELEASE: ${{ inputs.prerelease }} + working-directory: dist + run: | + files=(offmic.zip offmic.zip.sha256) + if [ "$OFFICIAL" = "true" ]; then + flags="" + [ "$PRERELEASE" = "true" ] && flags="--prerelease" + gh release create "v$VERSION" "${files[@]}" \ + --title "OffMic $VERSION" --generate-notes $flags + else + gh release delete latest --yes --cleanup-tag || true + gh release create latest "${files[@]}" \ + --title "Latest build ($VERSION, build $RUN_NUMBER)" \ + --notes "" --prerelease + fi diff --git a/server/src/landing.html b/server/src/landing.html index 5005d22..fc9213f 100644 --- a/server/src/landing.html +++ b/server/src/landing.html @@ -482,7 +482,7 @@

What's in the box

Peer-to-peer audio

WebRTC mesh, end-to-end encrypted by DTLS-SRTP. Media never touches a server.

Rooms

A shared team code is the only secret. No account, no sign-up, no invite flow.

Keep listening

Hear your team even while your Teams mic is live. On by default, switchable off.

-

Five languages

English, French, Dutch, German and Spanish, following your browser or pinned by hand.

+

Per-voice mixing

Pick your mic and output, set your own level. Mute or turn down any teammate who runs loud.

Light and dark

Follows your browser theme, or forced either way from the popup settings.

Your own relay

Point the extension at any server you run. The address is editable straight from the popup.

Nothing stored

Rooms live in memory on the relay and are never written to disk. Settings stay in your browser.