Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
83bb638
fix: missing .env file is raising extra warnings in Sentry during dev.
azfoo Nov 4, 2025
7c189f0
ci: test for python 3.13
azfoo Nov 4, 2025
9d764f5
ci: run tests for newer python versions
azfoo Nov 15, 2025
b89f9db
fix: missing objectName
azfoo Nov 4, 2025
d6a5b84
build: PyQt -> PySide
azfoo Nov 17, 2025
3fae9f4
fix: returns before event loops complete
azfoo Nov 17, 2025
053249e
fix: incorrect kwarg name
azfoo Nov 24, 2025
9c5883f
ci: test does not require screen definition
azfoo Nov 24, 2025
0ad3c3e
ci: min ver PySide 6.8 set for long-term support
azfoo Nov 24, 2025
dcb44af
ci: PySide currently supports Python [3.10 - 3.13]
azfoo Nov 24, 2025
777c51b
chore: remove outdated builder
azfoo Nov 25, 2025
f853da7
build: centralise all dependencies in pyproject file
azfoo Nov 25, 2025
8294d36
fix: toml parser for python <3.11
azfoo Nov 25, 2025
6f9b627
chore: remove unused files
azfoo Dec 3, 2025
7686618
refactor: rename
azfoo Dec 3, 2025
a5178b4
refactor: only import the necessary UI
azfoo Dec 5, 2025
2aba357
docs: update deps
azfoo Dec 6, 2025
64eaf57
docs: some spelling
azfoo Dec 6, 2025
15c5b48
chore: completely remove setup.cfg
azfoo Dec 8, 2025
4b57ee5
refactor: use common load env method
azfoo Dec 8, 2025
0b4a9e1
refactor: defaults to dev
azfoo Dec 8, 2025
aa7bda5
ci: update dependency for toml
azfoo Dec 8, 2025
dbc4456
chore: typos
azfoo Dec 8, 2025
79ab323
refactor: reduce method calls
azfoo Dec 8, 2025
86949ad
fix: locating metadata
azfoo Dec 8, 2025
2f81222
refactor: read license file in constants
azfoo Dec 8, 2025
f4838f5
fix: dir in deployment cannot be chdir'ed into
azfoo Dec 8, 2025
6cf9f84
chore: technical difference
azfoo Dec 8, 2025
c912eab
fix: typos
azfoo Feb 9, 2026
b78bf9a
fix: more secure dotenv
azfoo Dec 9, 2025
93f0a81
build: nuitka
azfoo Dec 9, 2025
a303235
fix: loading dotenv first
azfoo Feb 9, 2026
4ed5b59
chore: migrate to ruff
azfoo Feb 8, 2026
d5c9724
ci: fix mac build tests
azfoo Feb 11, 2026
3b2258e
refactor: mostly typing fixes
azfoo Feb 12, 2026
a6d1b1a
ci: don't test python 3.13 on windows
azfoo Feb 12, 2026
2d57cdd
chore: update docs
azfoo Feb 12, 2026
f7b0c91
fix: locating start of script
azfoo Feb 12, 2026
1dcdd73
fix: typing
azfoo Feb 16, 2026
4e5f874
fix: stdout not showing
azfoo Feb 16, 2026
ec00b76
chore: shorten name
azfoo Feb 16, 2026
d06509d
chore: bump year
azfoo Feb 16, 2026
6f65b2b
docs: update
azfoo Feb 16, 2026
80cb886
docs: update deploy script
azfoo Feb 16, 2026
da796bf
ci: more descriptive build-test
azfoo Feb 16, 2026
7fc79e8
fix: accidental duplicate
azfoo Feb 16, 2026
f7e3fd5
fix: reverts 66e88dc
azfoo Feb 16, 2026
a1d390f
docs: some help on nuitka-package.config
azfoo Feb 16, 2026
21e8617
docs: script/deploy
azfoo Feb 16, 2026
29aa733
ci: check ci test actually works
azfoo Feb 16, 2026
16b8cf5
ci: revert b4f9444
azfoo Feb 16, 2026
a29f043
ci: pin setuptools version
azfoo Feb 16, 2026
24c42d4
fix: settings fix uninstantiated error
azfoo Feb 19, 2026
804562d
ci: remove CLI from executable
azfoo Feb 19, 2026
d47b961
ci: test cli
azfoo Feb 16, 2026
03ecb3c
fix: correct mode
azfoo Feb 19, 2026
8a0e652
docs: update
azfoo Feb 19, 2026
0d15c80
docs: Fix typos, improve wording & formatting
azfoo Feb 19, 2026
7a4ad02
fix: improve debug message
azfoo Feb 20, 2026
04e2d28
docs: some explanatory notes
azfoo Feb 20, 2026
e1d87c0
fix: typo
azfoo Feb 20, 2026
9b2a6bb
ci: fix and standardise
azfoo Feb 20, 2026
5474b6c
fix: typo
azfoo Mar 4, 2026
a78cee1
fix: correct location
azfoo Mar 4, 2026
db96306
ci: bump actions version
azfoo Mar 16, 2026
a5bcdd9
ci: don't zip mac
azfoo Mar 17, 2026
703a523
fi: correct filename
azfoo Mar 17, 2026
0d3dc9a
fix: correct filename
azfoo Mar 18, 2026
ef84944
fix: correct filename
azfoo Mar 18, 2026
82473ce
fix: handle tilia package metadata not found
FelipeDefensor Mar 20, 2026
e2bf10e
fix: update event name in EXCLUDE_FROM_LOG event name
FelipeDefensor Mar 20, 2026
456c82f
fix: circular import
FelipeDefensor Mar 20, 2026
a334b63
fix: use dict.get(key) instead of dict[key]
FelipeDefensor Mar 20, 2026
55dbf3c
test: fix error when tearing down ManageTimelines()
FelipeDefensor Mar 20, 2026
fdd65ff
test: timeline is deleted while ManagaTimelines is open
FelipeDefensor Mar 20, 2026
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
204 changes: 145 additions & 59 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -1,85 +1,171 @@
name: Build with pyinstaller
name: Build TiLiA

on:
workflow_dispatch:
push:
tags:
- 'v*'
- "v*"

jobs:
build:
name: Build with pyinstaller
name: Build with Nuitka
continue-on-error: true
runs-on: ${{ matrix.os }}
permissions:
contents: read
outputs:
linux-build: ${{ steps.set-path.outputs.path }}
strategy:
matrix:
include:
- os: windows-latest
CMD_BUILD: pyinstaller tilia.spec
OUT_FILE_OS: win
OUT_FILE_EXTENSION: .exe
ASSET_MIME: application/vnd.microsoft.portable-executable

- os: macos-13
CMD_BUILD: >
pyinstaller tilia.spec &&
cd dist &&
mv tilia-$APP_VERSION-mac.app tilia-$APP_VERSION-mac-intel.app &&
zip -r9 tilia-$APP_VERSION-mac-intel.zip tilia-$APP_VERSION-mac-intel.app
OUT_FILE_OS: mac-intel
OUT_FILE_EXTENSION: .zip
ASSET_MIME: application/zip

- os: macos-14
CMD_BUILD: >
pyinstaller tilia.spec &&
cd dist &&
mv tilia-$APP_VERSION-mac.app tilia-$APP_VERSION-mac-silicon.app &&
zip -r9 tilia-$APP_VERSION-mac-silicon.zip tilia-$APP_VERSION-mac-silicon.app
OUT_FILE_OS: mac-silicon
OUT_FILE_EXTENSION: .zip
ASSET_MIME: application/zip

- os: ubuntu-latest
CMD_BUILD: >
pyinstaller tilia.spec
OUT_FILE_OS: linux
OUT_FILE_EXTENSION:
ASSET_MIME: application/octet-stream
os: [
macos-latest,
macos-15-intel,
ubuntu-22.04,
windows-latest
]
env:
QT_DEBUG_PLUGINS: 1
QT_QPA_PLATFORM: offscreen

steps:
- uses: actions/checkout@v4

- name: Extract package version
id: extract_version
shell: pwsh
run: |
$version = (Select-String '^version =' setup.cfg).Line -split ' = ' | Select-Object -Last 1
echo "APP_VERSION=$version" | Out-File -FilePath $env:GITHUB_ENV -Append

- name: Set output file name
shell: pwsh
run: |
$out_file_name = "tilia-${{env.APP_VERSION}}-${{matrix.OUT_FILE_OS}}${{matrix.OUT_FILE_EXTENSION}}"
echo "OUT_FILE_NAME=$out_file_name" | Out-File -FilePath $env:GITHUB_ENV -Append
- uses: actions/checkout@v6

- name: Set up Python 3.11
uses: actions/setup-python@v5
uses: actions/setup-python@v6
with:
python-version: 3.11
cache: 'pip'
cache: "pip"

- name: Setup additional Linux dependencies
if: runner.os == 'Linux'
run: |
chmod +x ./scripts/linux-setup.sh
./scripts/linux-setup.sh

- name: Remove problematic brew libs (see Nuitka/Nuitka#2853)
if: runner.os == 'macOS' && runner.arch != 'ARM64'
run: |
brew remove --force --ignore-dependencies openssl@3
brew cleanup openssl@3

- name: Install dependencies
run: |
python -m pip install --upgrade pip setuptools wheel
pip install -e .
pip install pyinstaller
python -m pip install --upgrade pip
pip install -e . --group build

- name: Build executable
id: build-exe
shell: bash
run: |
echo "python scripts/deploy.py ${{github.ref_name}} ${{matrix.os}}" | bash

- name: Test executable [mac]
if: runner.os == 'macOS'
shell: bash
run: |
brew install coreutils
echo "Checking dependencies"
# test build starts up - should see the output of qt_debug_plugins. the command will kill itself in 10s if everything works. something went wrong if time taken for this command is less than 10s.
# then zip everything up and delete the original non-zipped file.
echo "Starting GUI..."
start=$(date +%s)
echo "gtimeout 10 ${{ steps.build-exe.outputs.out-filepath }}/Contents/MacOS/${{ steps.build-exe.outputs.out-filename }}" | bash || true
if (($(date +%s) - $start < 10)); then
echo "::error::Process terminated early! Potential errors in build."
exit 1
fi
echo "\n\nStarting CLI..."
echo "gtimeout 10 ${{ steps.build-exe.outputs.out-filepath }}/Contents/MacOS/${{ steps.build-exe.outputs.out-filename }} --user-interface=cli" | bash || true

- name: Test executable [Windows]
if: runner.os == 'Windows'
shell: bash
run: ${{matrix.CMD_BUILD}}
run: |
echo "Checking dependencies"
# test build starts up - should see the output of qt_debug_plugins. the command will kill itself in 10s if everything works. something went wrong if time taken for this command is not 10s.
echo "Starting GUI..."
start=$(date +%s)
echo "timeout 10 ${{ steps.build-exe.outputs.out-filepath }}" | bash || true
if (($(date +%s) - $start < 10)); then
echo "::error::Process terminated early! Potential errors in build."
exit 1
fi
echo "\n\nStarting CLI..."
echo "timeout 10 ${{ steps.build-exe.outputs.out-filepath }} --user-interface=cli" | bash || true

- name: Test executable [Linux]
id: set-path
if: runner.os == 'Linux'
shell: bash
run: |
echo "path=${{ steps.build-exe.outputs.out-filename }}" >> "$GITHUB_OUTPUT"
echo "Checking dependencies"
# test build starts up - should see the output of qt_debug_plugins. the command will kill itself in 10s if everything works. something went wrong if time taken for this command is not 10s.
echo "Starting GUI..."
start=$(date +%s)
echo "timeout 10 ${{ steps.build-exe.outputs.out-filepath }}" | bash || true
if (($(date +%s) - $start < 10)); then
echo "::error::Process terminated early! Potential errors in build."
exit 1
fi
echo "\n\nStarting CLI..."
echo "timeout 10 ${{ steps.build-exe.outputs.out-filepath }} --user-interface=cli" | bash || true

- name: Upload executable
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: ${{ steps.build-exe.outputs.out-filename }}
path: build/*/exe
retention-days: 1

deploy:
name: Create release
continue-on-error: true
needs: build
runs-on: "ubuntu-latest"
permissions:
contents: write
env:
QT_DEBUG_PLUGINS: 1
QT_QPA_PLATFORM: offscreen
steps:
- uses: actions/checkout@v6

- name: Download executable
uses: actions/download-artifact@v8
with:
path: build/
pattern: 'TiLiA-v*'
merge-multiple: true

- name: Test Linux still works in a clean environment
continue-on-error: true
id: test-linux
run: |
if [ -e build/ubuntu/exe/${{ needs.build.outputs.linux-build }} ];
then
chmod ugo+x build/ubuntu/exe/${{ needs.build.outputs.linux-build }}
echo "Starting GUI..."
start=$(date +%s)
echo "timeout 10 build/ubuntu/exe/${{ needs.build.outputs.linux-build }}" | bash || true
if (($(date +%s) - $start < 10));
then
echo "Linux started in a clean environment!";
else
echo "Linux didn't work... Check libraries with previous step?";
fi;
echo "Starting CLI..."
echo "timeout 10 build/ubuntu/exe/${{ needs.build.outputs.linux-build }} --user-interface=cli" | bash || true
else
echo "file not found!";
fi
ls build -ltraR |egrep -v '\.$|\.\.|\.:|\.\/|total|^d' | sed '/^$/d' || true

- name: Upload
uses: "softprops/action-gh-release@v2"
with:
name: ${{env.OUT_FILE_NAME}}
path: dist/${{env.OUT_FILE_NAME}}
tag_name: ${{github.ref_name}}
make_latest: ${{github.event_name == 'push'}}
generate_release_notes: true
files: |
build/*/exe/TiLiA-v*
42 changes: 27 additions & 15 deletions .github/workflows/run-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,7 @@ jobs:
strategy:
fail-fast: false
matrix:
# TODO: test for 3.13
python-version: ['3.10', '3.11', '3.12']
python-version: ['3.10', '3.11', '3.12', '3.13']
os: [macos-latest, ubuntu-latest, windows-latest]
include:
- os: ubuntu-latest
Expand All @@ -34,27 +33,31 @@ jobs:
path: ~/Library/Caches/pip
- os: windows-latest
path: ~\AppData\Local\pip\Cache
exclude:
- os: windows-latest
python-version: '3.13' # no pyside support
timeout-minutes: 30
env:
DISPLAY: ":99.0"
QT_SELECT: "qt6"
QT_QPA_PLATFORM: offscreen

steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v6
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}

- name: Setup xvfb (Linux)
- name: Setup additional Linux dependencies
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y xvfb libxkbcommon-x11-0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xinerama0 libxcb-xinput0 libxcb-xfixes0 libxcb-shape0 libglib2.0-0 libgl1-mesa-dev libpulse-dev
sudo apt-get install '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev
sudo /usr/bin/Xvfb $DISPLAY -screen 0 1280x1024x24 &
chmod +x ./scripts/linux-setup.sh
./scripts/linux-setup.sh

- uses: actions/cache@v4
- name: Install timeout
if: runner.os == 'macOS'
run: brew install coreutils

- uses: actions/cache@v5
with:
path: ${{ matrix.path }}
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
Expand All @@ -64,15 +67,15 @@ jobs:
- name: Install Python dependencies
run: |
python -m pip install --upgrade pip wheel
pip install -e .[testing,ci-tests]
pip install -e . --group testing --group ci-tests

- name: List installed packages
run: |
pip freeze

- name: Lint with flake8
- name: Lint with ruff
run: |
flake8
ruff check
continue-on-error: true

- name: Test with pytest
Expand All @@ -82,3 +85,12 @@ jobs:
- name: Generate Coverage Report
run: |
coverage report -m

- name: Check Program
shell: bash
run: |
export QT_DEBUG_PLUGINS=1
echo "Starting GUI..."
timeout 10 tilia || true
echo "Starting CLI..."
timeout 10 tilia -i=cli || true
2 changes: 0 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,7 @@
/.pytest_cache/
/build/
/dist/
/tilia/installers/win/tilia*
/tilia.egg-info/
/venv/
__pycache__/
pytest.ini
tilia/dev/
15 changes: 8 additions & 7 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,20 +1,21 @@
repos:
- repo: https://github.com/psf/black
- repo: https://github.com/psf/black
rev: 22.12.0
hooks:
- id: black
- id: black

- repo: https://github.com/pre-commit/pre-commit-hooks
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-added-large-files
args: ['--maxkb=1000']
args: ["--maxkb=1000"]
- id: debug-statements
- id: check-yaml

- repo: https://github.com/pycqa/flake8
rev: 7.1.0
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.15.0
hooks:
- id: flake8
- id: ruff-check
args: [ --fix ]
3 changes: 3 additions & 0 deletions .tilia.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
LOG_REQUESTS = 1
EXCLUDE_FROM_LOG = TIMELINE_VIEW_LEFT_BUTTON_DRAG;PLAYER_CURRENT_TIME_CHANGED;APP_STATE_RECORD
ENVIRONMENT='dev'
9 changes: 8 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,11 @@ If you find a bug, [check](https://github.com/TimeLineAnnotator/desktop/issues)
# Suggesting features or enhancements
We are very much looking for ideas of new features for TiLiA. If you would like to suggest one, [check](https://github.com/TimeLineAnnotator/desktop/issues) to see if your feature has already been requested. If not, [open a new one](https://github.com/TimeLineAnnotator/desktop/issues/new) detailing your suggestion.

You need Python 3.11 to build and test TiLiA. You will also need to have ffmpeg installed to use the export and convert audio features.
You need Python >=3.10 to build and test TiLiA. You will also need to have ffmpeg installed to use the export and convert audio features.

# Developing for TiLiA
For a better development experience, we recommend the installation of a few more packages:
```
pip install --group dev --group testing
pre-commit install
```
Loading