feat(identity): rename user-visible identity to voculinux with one-time legacy import
The fork takes its own name everywhere a user can see it: binaries (voculinux, voculinux-gui), desktop entry, autostart, tray, D-Bus namespace (com.voculinux.Voculinux, no alias for the old name), config/data/cache dirs, single-instance lock, IBus engine identity, tray icons, resource prefixes, VOCULINUX_* environment names, and the update-checker user agent. The internal Python module stays vocalinux and the distribution metadata keeps the upstream URLs as provenance. On first run a previous Vocalinux install's config.json, custom dictionary, and portal restore token are copied once into the new locations (new config always wins, no merge, no write-back); models re-resolve through the pinned-checksum download path. An offline naming-sweep test proves no old-name strings remain on user-visible surfaces outside the allowlist. Refs #18
This commit is contained in:
@@ -15,11 +15,11 @@ env:
|
||||
# Build against the supported floor (requires-python in pyproject.toml).
|
||||
PYTHON_VERSION: '3.11'
|
||||
# The dedicated "tap" repo and the URL Pages serves it at. A custom
|
||||
# domain (e.g. flatpak.vocalinux.com) overrides both via the vars.
|
||||
# domain (e.g. flatpak.voculinux.com) overrides both via the vars.
|
||||
FLATPAK_REMOTE_REPO: ${{ vars.FLATPAK_REMOTE_REPO || 'VocaHQ/vocalinux-flatpak' }}
|
||||
FLATPAK_REMOTE_URL: ${{ vars.FLATPAK_REMOTE_URL || 'https://vocahq.github.io/vocalinux-flatpak/repo' }}
|
||||
FLATPAKREPO_URL: ${{ vars.FLATPAKREPO_URL || 'https://vocahq.github.io/vocalinux-flatpak/vocahq.flatpakrepo' }}
|
||||
FLATPAKREF_URL: ${{ vars.FLATPAKREF_URL || 'https://vocahq.github.io/vocalinux-flatpak/com.vocalinux.Vocalinux.flatpakref' }}
|
||||
FLATPAK_REMOTE_URL: ${{ vars.FLATPAK_REMOTE_URL || 'https://vocahq.github.io/voculinux-flatpak/repo' }}
|
||||
FLATPAKREPO_URL: ${{ vars.FLATPAKREPO_URL || 'https://vocahq.github.io/voculinux-flatpak/vocahq.flatpakrepo' }}
|
||||
FLATPAKREF_URL: ${{ vars.FLATPAKREF_URL || 'https://vocahq.github.io/voculinux-flatpak/com.voculinux.Voculinux.flatpakref' }}
|
||||
|
||||
jobs:
|
||||
build-and-release:
|
||||
@@ -101,12 +101,12 @@ jobs:
|
||||
- name: Cache AppImage build tools
|
||||
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
||||
with:
|
||||
path: ~/.cache/vocalinux-appimage
|
||||
path: ~/.cache/voculinux-appimage
|
||||
key: appimage-native-${{ runner.arch }}-${{ steps.native-cache.outputs.id }}
|
||||
|
||||
- name: Build AppImage (x86_64)
|
||||
env:
|
||||
VOCALINUX_APPIMAGE_REQUIRE_VULKAN: "1"
|
||||
VOCULINUX_APPIMAGE_REQUIRE_VULKAN: "1"
|
||||
run: |
|
||||
bash packaging/appimage/docker-build.sh dist/*.whl "${{ steps.get_version.outputs.VERSION }}" dist
|
||||
ls -la dist/*.AppImage
|
||||
@@ -151,7 +151,7 @@ jobs:
|
||||
```bash
|
||||
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
|
||||
flatpak remote-add --if-not-exists vocahq __FLATPAKREPO_URL__
|
||||
flatpak install vocahq com.vocalinux.Vocalinux
|
||||
flatpak install vocahq com.voculinux.Voculinux
|
||||
```
|
||||
|
||||
Or download the `.flatpak` matching your CPU (`x86_64` or `aarch64`, attached
|
||||
@@ -161,8 +161,8 @@ jobs:
|
||||
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
|
||||
flatpak install flathub org.gnome.Platform//50
|
||||
|
||||
flatpak install --user ./Vocalinux-__VERSION__-x86_64.flatpak
|
||||
flatpak run com.vocalinux.Vocalinux
|
||||
flatpak install --user ./Voculinux-__VERSION__-x86_64.flatpak
|
||||
flatpak run com.voculinux.Voculinux
|
||||
```
|
||||
EOF
|
||||
else
|
||||
@@ -175,8 +175,8 @@ jobs:
|
||||
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
|
||||
flatpak install flathub org.gnome.Platform//50
|
||||
|
||||
flatpak install --user ./Vocalinux-__VERSION__-x86_64.flatpak
|
||||
flatpak run com.vocalinux.Vocalinux
|
||||
flatpak install --user ./Voculinux-__VERSION__-x86_64.flatpak
|
||||
flatpak run com.voculinux.Voculinux
|
||||
```
|
||||
EOF
|
||||
if [ "$prerelease" = true ]; then
|
||||
@@ -223,7 +223,7 @@ jobs:
|
||||
### From Source
|
||||
```bash
|
||||
git clone https://github.com/VocaHQ/vocalinux.git
|
||||
cd vocalinux
|
||||
cd voculinux
|
||||
./install.sh
|
||||
```
|
||||
|
||||
@@ -231,10 +231,10 @@ jobs:
|
||||
```bash
|
||||
# Install the Linux system packages first:
|
||||
# GTK/AppIndicator, PortAudio, and xdotool/wtype are required.
|
||||
python3 -m venv ~/.local/share/vocalinux-pypi/venv --system-site-packages
|
||||
source ~/.local/share/vocalinux-pypi/venv/bin/activate
|
||||
pip install vocalinux
|
||||
vocalinux
|
||||
python3 -m venv ~/.local/share/voculinux-pypi/venv --system-site-packages
|
||||
source ~/.local/share/voculinux-pypi/venv/bin/activate
|
||||
pip install voculinux
|
||||
voculinux
|
||||
```
|
||||
|
||||
PyPI installs the Python package only. For automatic system dependency,
|
||||
@@ -243,15 +243,15 @@ jobs:
|
||||
|
||||
### Arch Linux (AUR)
|
||||
```bash
|
||||
yay -S vocalinux
|
||||
yay -S voculinux
|
||||
```
|
||||
|
||||
### AppImage (no install, no root)
|
||||
Download the `.AppImage` matching your CPU (`x86_64` or `aarch64`, the latter attached
|
||||
shortly after this release is published) below:
|
||||
```bash
|
||||
chmod +x Vocalinux-${{ steps.get_version.outputs.VERSION }}-x86_64.AppImage
|
||||
./Vocalinux-${{ steps.get_version.outputs.VERSION }}-x86_64.AppImage
|
||||
chmod +x Voculinux-${{ steps.get_version.outputs.VERSION }}-x86_64.AppImage
|
||||
./Voculinux-${{ steps.get_version.outputs.VERSION }}-x86_64.AppImage
|
||||
```
|
||||
Still requires `xdotool`/`wtype`/`ydotool` on the host for text injection, same as the PyPI path.
|
||||
|
||||
@@ -260,10 +260,10 @@ jobs:
|
||||
attached shortly after this release is published):
|
||||
```bash
|
||||
# Debian / Ubuntu
|
||||
sudo apt install ./vocalinux_*_amd64.deb
|
||||
sudo apt install ./voculinux_*_amd64.deb
|
||||
|
||||
# Fedora
|
||||
sudo dnf install ./vocalinux-*.x86_64.rpm
|
||||
sudo dnf install ./voculinux-*.x86_64.rpm
|
||||
```
|
||||
Thin packages: Python, GTK, PyGObject and the AppIndicator typelib come from the
|
||||
distro, and `apt`/`dnf` resolves them. Only `pywhispercpp` and `pynput` are
|
||||
@@ -278,13 +278,13 @@ jobs:
|
||||
${{ steps.flatpak_notes.outputs.flatpak }}
|
||||
|
||||
### Snap
|
||||
Tagged releases also attach `vocalinux_${{ steps.get_version.outputs.VERSION }}_amd64.snap`
|
||||
Tagged releases also attach `voculinux_${{ steps.get_version.outputs.VERSION }}_amd64.snap`
|
||||
and try the Snap Store (`edge` and `candidate`). `stable` is promoted
|
||||
from candidate after QA by the `snap-promote.yml` dispatch workflow.
|
||||
Wayland typing runs through the RemoteDesktop portal; the snap ships no `uinput` plug.
|
||||
The GitHub `.snap` is also the sideload while a Store revision lags:
|
||||
```bash
|
||||
sudo snap install --dangerous ./vocalinux_${{ steps.get_version.outputs.VERSION }}_amd64.snap
|
||||
sudo snap install --dangerous ./voculinux_${{ steps.get_version.outputs.VERSION }}_amd64.snap
|
||||
```
|
||||
`--dangerous` is required because this file is not a Store revision. It will not
|
||||
refresh from the Store. amd64 only.
|
||||
@@ -298,7 +298,7 @@ jobs:
|
||||
```
|
||||
Each artifact also carries GitHub build provenance, which ties it to this workflow run:
|
||||
```bash
|
||||
gh attestation verify Vocalinux-${{ steps.get_version.outputs.VERSION }}-x86_64.AppImage \
|
||||
gh attestation verify Voculinux-${{ steps.get_version.outputs.VERSION }}-x86_64.AppImage \
|
||||
--repo ${{ github.repository }}
|
||||
```
|
||||
|
||||
@@ -343,12 +343,12 @@ jobs:
|
||||
- name: Cache AppImage build tools
|
||||
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
||||
with:
|
||||
path: ~/.cache/vocalinux-appimage
|
||||
path: ~/.cache/voculinux-appimage
|
||||
key: appimage-native-${{ runner.arch }}-${{ steps.native-cache.outputs.id }}
|
||||
|
||||
- name: Build AppImage (aarch64)
|
||||
env:
|
||||
VOCALINUX_APPIMAGE_REQUIRE_VULKAN: "1"
|
||||
VOCULINUX_APPIMAGE_REQUIRE_VULKAN: "1"
|
||||
run: |
|
||||
bash packaging/appimage/docker-build.sh dist/*.whl "${{ steps.get_version.outputs.VERSION }}" dist
|
||||
ls -la dist/*.AppImage
|
||||
@@ -492,8 +492,8 @@ jobs:
|
||||
- name: Build and bundle
|
||||
uses: flatpak/flatpak-github-actions/flatpak-builder@79327416609af08178ad73b352877e51450790b3 # v6
|
||||
with:
|
||||
bundle: Vocalinux-${{ steps.get_version.outputs.VERSION }}-x86_64.flatpak
|
||||
manifest-path: packaging/flatpak/com.vocalinux.Vocalinux.yml
|
||||
bundle: Voculinux-${{ steps.get_version.outputs.VERSION }}-x86_64.flatpak
|
||||
manifest-path: packaging/flatpak/com.voculinux.Voculinux.yml
|
||||
# Same prefix rule as flatpak.yml: restore-keys is
|
||||
# `flatpak-builder-${arch}`. The action appends -${arch} again.
|
||||
cache-key: flatpak-builder-x86_64-${{ hashFiles('packaging/flatpak/**') }}
|
||||
@@ -506,7 +506,7 @@ jobs:
|
||||
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
||||
with:
|
||||
name: flatpak-x86_64
|
||||
path: Vocalinux-${{ steps.get_version.outputs.VERSION }}-x86_64.flatpak
|
||||
path: Voculinux-${{ steps.get_version.outputs.VERSION }}-x86_64.flatpak
|
||||
if-no-files-found: error
|
||||
retention-days: 7
|
||||
|
||||
@@ -529,8 +529,8 @@ jobs:
|
||||
- name: Build and bundle
|
||||
uses: flatpak/flatpak-github-actions/flatpak-builder@79327416609af08178ad73b352877e51450790b3 # v6
|
||||
with:
|
||||
bundle: Vocalinux-${{ steps.get_version.outputs.VERSION }}-aarch64.flatpak
|
||||
manifest-path: packaging/flatpak/com.vocalinux.Vocalinux.yml
|
||||
bundle: Voculinux-${{ steps.get_version.outputs.VERSION }}-aarch64.flatpak
|
||||
manifest-path: packaging/flatpak/com.voculinux.Voculinux.yml
|
||||
cache-key: flatpak-builder-aarch64-${{ hashFiles('packaging/flatpak/**') }}
|
||||
arch: aarch64
|
||||
upload-artifact: false
|
||||
@@ -540,7 +540,7 @@ jobs:
|
||||
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
||||
with:
|
||||
name: flatpak-aarch64
|
||||
path: Vocalinux-${{ steps.get_version.outputs.VERSION }}-aarch64.flatpak
|
||||
path: Voculinux-${{ steps.get_version.outputs.VERSION }}-aarch64.flatpak
|
||||
if-no-files-found: error
|
||||
retention-days: 7
|
||||
|
||||
@@ -715,27 +715,27 @@ jobs:
|
||||
echo '[Flatpak Repo]'
|
||||
echo 'Title=VocaHQ'
|
||||
echo "Url=${FLATPAK_REMOTE_URL}"
|
||||
echo 'Homepage=https://vocalinux.com'
|
||||
echo 'Comment=Official Vocalinux Flatpak remote'
|
||||
echo 'Description=Self-hosted Vocalinux Flatpak repository'
|
||||
echo 'Icon=https://vocalinux.com/icon-512x512.png'
|
||||
echo 'Homepage=https://voculinux.com'
|
||||
echo 'Comment=Official Voculinux Flatpak remote'
|
||||
echo 'Description=Self-hosted Voculinux Flatpak repository'
|
||||
echo 'Icon=https://voculinux.com/icon-512x512.png'
|
||||
echo 'DefaultBranch=stable'
|
||||
echo "GPGKey=$(base64 -w0 "$RUNNER_TEMP/pubkey.gpg")"
|
||||
} > publish/vocahq.flatpakrepo
|
||||
{
|
||||
echo '[Flatpak Ref]'
|
||||
echo 'Version=1'
|
||||
echo 'Title=Vocalinux'
|
||||
echo 'Name=com.vocalinux.Vocalinux'
|
||||
echo 'Title=Voculinux'
|
||||
echo 'Name=com.voculinux.Voculinux'
|
||||
echo 'Branch=stable'
|
||||
echo "Url=${FLATPAK_REMOTE_URL}"
|
||||
echo 'SuggestRemoteName=vocahq'
|
||||
echo 'RuntimeRepo=https://dl.flathub.org/repo/flathub.flatpakrepo'
|
||||
echo 'IsRuntime=false'
|
||||
echo 'Homepage=https://vocalinux.com'
|
||||
echo 'Icon=https://vocalinux.com/icon-512x512.png'
|
||||
echo 'Homepage=https://voculinux.com'
|
||||
echo 'Icon=https://voculinux.com/icon-512x512.png'
|
||||
echo "GPGKey=$(base64 -w0 "$RUNNER_TEMP/pubkey.gpg")"
|
||||
} > publish/com.vocalinux.Vocalinux.flatpakref
|
||||
} > publish/com.voculinux.Voculinux.flatpakref
|
||||
cp "$RUNNER_TEMP/pubkey.gpg" publish/vocahq.gpg
|
||||
grep -v GPGKey publish/vocahq.flatpakrepo
|
||||
sed -e "s|__FLATPAKREPO_URL__|${FLATPAKREPO_URL}|g" \
|
||||
@@ -751,7 +751,7 @@ jobs:
|
||||
external_repository: ${{ env.FLATPAK_REMOTE_REPO }}
|
||||
publish_dir: ./publish
|
||||
publish_branch: gh-pages
|
||||
commit_message: 'Vocalinux ${{ github.ref_name }}'
|
||||
commit_message: 'Voculinux ${{ github.ref_name }}'
|
||||
|
||||
attach-flatpak:
|
||||
name: Attach Flatpak bundles
|
||||
@@ -854,7 +854,7 @@ jobs:
|
||||
id-token: write # PyPI trusted publishing; there is no API token to leak
|
||||
environment:
|
||||
name: pypi
|
||||
url: https://pypi.org/project/vocalinux/
|
||||
url: https://pypi.org/project/voculinux/
|
||||
steps:
|
||||
# Not a rebuild: the artifact attached to the GitHub release, so one
|
||||
# checksum describes both.
|
||||
@@ -892,14 +892,14 @@ jobs:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
gh release download "$GITHUB_REF_NAME" --repo "$GITHUB_REPOSITORY" \
|
||||
--pattern 'vocalinux-*.tar.gz' --pattern SHA256SUMS --dir release-source
|
||||
--pattern 'voculinux-*.tar.gz' --pattern SHA256SUMS --dir release-source
|
||||
- name: Verify provenance and prepare the exact source PKGBUILD
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
uv run --python "$(command -v python)" --locked --only-group release-build \
|
||||
python scripts/prepare_aur_source.py \
|
||||
--sdist release-source/vocalinux-*.tar.gz --manifest release-source/SHA256SUMS \
|
||||
--sdist release-source/voculinux-*.tar.gz --manifest release-source/SHA256SUMS \
|
||||
--tag "$GITHUB_REF_NAME" --source-commit "$GITHUB_SHA" --output build/aur-source
|
||||
- name: Build and install the exact source PKGBUILD on Arch
|
||||
run: |
|
||||
@@ -944,7 +944,7 @@ jobs:
|
||||
if: steps.aur.outputs.configured == 'true'
|
||||
uses: KSXGitHub/github-actions-deploy-aur@084b0d9b15415bf9cdb65d44dad1efe37a354050 # v4.2.0
|
||||
with:
|
||||
pkgname: vocalinux
|
||||
pkgname: voculinux
|
||||
pkgbuild: aur-source/PKGBUILD
|
||||
updpkgsums: 'false'
|
||||
commit_username: ${{ secrets.AUR_USERNAME }}
|
||||
@@ -985,7 +985,7 @@ jobs:
|
||||
run: |
|
||||
set -euo pipefail
|
||||
TAG="${GITHUB_REF#refs/tags/v}"
|
||||
PKGBUILD=packaging/aur/vocalinux-bin/PKGBUILD
|
||||
PKGBUILD=packaging/aur/voculinux-bin/PKGBUILD
|
||||
sed -i "s/^pkgver=.*/pkgver=${TAG//-/}/; s/^_tag=.*/_tag=${TAG}/; s/^pkgrel=.*/pkgrel=1/" "$PKGBUILD"
|
||||
grep -E '^(pkgver|_tag|pkgrel)=' "$PKGBUILD"
|
||||
|
||||
@@ -998,21 +998,21 @@ jobs:
|
||||
set -euo pipefail
|
||||
tag="${GITHUB_REF_NAME#v}"
|
||||
for arch in x86_64 aarch64; do
|
||||
url="https://github.com/VocaHQ/vocalinux/releases/download/${GITHUB_REF_NAME}/Vocalinux-${tag}-${arch}.AppImage"
|
||||
url="https://github.com/VocaHQ/vocalinux/releases/download/${GITHUB_REF_NAME}/Voculinux-${tag}-${arch}.AppImage"
|
||||
sum="$(curl -fsSL "$url" | sha256sum | cut -d' ' -f1)"
|
||||
sed -i "s/^sha256sums_${arch}=('[0-9a-f]*')/sha256sums_${arch}=('${sum}')/" \
|
||||
packaging/aur/vocalinux-bin/PKGBUILD
|
||||
packaging/aur/voculinux-bin/PKGBUILD
|
||||
done
|
||||
|
||||
- name: Publish AUR -bin package
|
||||
if: steps.aur.outputs.configured == 'true'
|
||||
uses: KSXGitHub/github-actions-deploy-aur@084b0d9b15415bf9cdb65d44dad1efe37a354050 # v4.2.0
|
||||
with:
|
||||
pkgname: vocalinux-bin
|
||||
# The -bin PKGBUILD names local sources (vocalinux.desktop,
|
||||
# vocalinux.svg, LICENSE); publishing the whole directory mirrors
|
||||
pkgname: voculinux-bin
|
||||
# The -bin PKGBUILD names local sources (voculinux.desktop,
|
||||
# voculinux.svg, LICENSE); publishing the whole directory mirrors
|
||||
# them into the AUR repo instead of shipping a lone PKGBUILD.
|
||||
asset_dir: packaging/aur/vocalinux-bin
|
||||
asset_dir: packaging/aur/voculinux-bin
|
||||
# Sums are pinned in the step above for BOTH arches; regenerating
|
||||
# here would only refresh the x86_64 array.
|
||||
updpkgsums: 'false'
|
||||
@@ -1195,5 +1195,5 @@ jobs:
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
publish_dir: ./web/out
|
||||
publish_branch: gh-pages
|
||||
cname: vocalinux.com
|
||||
cname: voculinux.com
|
||||
force_orphan: true
|
||||
|
||||
Reference in New Issue
Block a user