Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
409a45d
feat: Upgrade Electron to 31.7.7 and Yarn to 4.12.0, disable `electro…
agenciaingenium Jan 1, 2026
012d0d3
feat: Update repository URLs, add fullscreen support, and enhance tra…
agenciaingenium Jan 9, 2026
c555100
chore: migrate to node 22, modernize storybook, reduce lint noise and…
agenciaingenium Feb 17, 2026
beaa243
chore(deps): align toolchain for node22 and stabilize peers
agenciaingenium Feb 17, 2026
dc87d5c
fix(app): make react perf addon optional at runtime
agenciaingenium Feb 17, 2026
78fdffc
feat(release): automate semantic versioning and release pipeline
agenciaingenium Feb 18, 2026
c3876be
chore(release): 1.1.0 [skip ci]\n\n# [1.1.0](https://github.com/agenc…
semantic-release-bot Feb 18, 2026
4b3252e
fix(ci): ensure release assets workflow can be triggered
agenciaingenium Feb 18, 2026
170aff1
chore(release): 1.1.1 [skip ci]\n\n## [1.1.1](https://github.com/agen…
semantic-release-bot Feb 18, 2026
afad471
fix(build): pin electron version for electron-builder
agenciaingenium Feb 18, 2026
f3412b0
chore(release): 1.1.2 [skip ci]\n\n## [1.1.2](https://github.com/agen…
semantic-release-bot Feb 18, 2026
900b3f3
fix(ci): use supported macos runner images for releases
agenciaingenium Feb 18, 2026
73c3928
chore(release): 1.1.3 [skip ci]\n\n## [1.1.3](https://github.com/agen…
semantic-release-bot Feb 18, 2026
ede1ff2
fix(ci): fallback to unsigned mac builds when signing secrets are mis…
agenciaingenium Feb 18, 2026
fa2ece1
chore(release): 1.1.4 [skip ci]\n\n## [1.1.4](https://github.com/agen…
semantic-release-bot Feb 18, 2026
af55be5
docs(release): document automated releases and unsigned macOS install
agenciaingenium Feb 18, 2026
3891864
chore(stability): add pre-release guardrails and dynamic UA checks
agenciaingenium Feb 20, 2026
579f7e6
fix(ci): disable electron sandbox for linux pre-release checks
agenciaingenium Feb 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
9 changes: 7 additions & 2 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,7 @@
**/*.ts
**/*.tsx
**/*.generated.ts
**/*.generated.tsx
**/*.d.ts
**/dist/**
**/lib/**
**/node_modules/**
packages/app/manifests/**/*.json
65 changes: 0 additions & 65 deletions .eslintrc

This file was deleted.

81 changes: 81 additions & 0 deletions .eslintrc.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
module.exports = {
root: true,
env: {
browser: true,
es2022: true,
jest: true,
node: true,
},
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaFeatures: {
jsx: true,
},
ecmaVersion: 'latest',
sourceType: 'module',
},
plugins: ['@typescript-eslint'],
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
],
rules: {
'@typescript-eslint/ban-ts-comment': 'off',
'@typescript-eslint/ban-types': 'off',
'@typescript-eslint/no-empty-function': 'off',
'@typescript-eslint/no-empty-interface': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-extra-non-null-assertion': 'off',
'@typescript-eslint/no-namespace': 'off',
'@typescript-eslint/no-non-null-asserted-optional-chain': 'off',
'@typescript-eslint/no-non-null-assertion': 'off',
'@typescript-eslint/no-unsafe-declaration-merging': 'off',
'@typescript-eslint/no-this-alias': 'off',
'@typescript-eslint/no-unused-expressions': 'off',
'@typescript-eslint/no-unused-vars': 'off',
'@typescript-eslint/no-var-requires': 'off',
'@typescript-eslint/prefer-as-const': 'off',
'no-case-declarations': 'off',
'no-console': 'off',
'no-constant-condition': 'off',
'no-empty': 'off',
'no-async-promise-executor': 'off',
'no-extra-boolean-cast': 'off',
'no-extra-semi': 'off',
'no-inner-declarations': 'off',
'no-irregular-whitespace': 'off',
'no-var': 'off',
'no-prototype-builtins': 'off',
'no-self-assign': 'off',
'no-undef': 'off',
'no-unreachable': 'off',
'no-unused-vars': 'off',
'no-useless-escape': 'off',
'prefer-const': 'off',
'require-yield': 'off',
},
overrides: [
{
files: ['**/*.{ts,tsx}'],
rules: {
'@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '^_', varsIgnorePattern: '^_' }],
},
},
{
files: ['**/test/**/*.{ts,tsx}', '**/*.spec.{ts,tsx}', '**/*.test.{ts,tsx}'],
rules: {
'@typescript-eslint/no-unused-vars': 'off',
},
},
{
files: ['**/interface.ts', '**/interfaces.ts', '**/dummy.ts'],
rules: {
'@typescript-eslint/no-unused-vars': 'off',
},
},
{
files: ['**/*.js'],
parser: 'espree',
},
],
};
17 changes: 14 additions & 3 deletions .github/workflows/release-candidate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ jobs:
runs-on: ubuntu-latest
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ELECTRON_DISABLE_SANDBOX: "1"
ELECTRON_NO_SANDBOX: "1"
GOOGLE_CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }}
GOOGLE_CLIENT_SECRET: ${{ secrets.GOOGLE_CLIENT_SECRET }}
steps:
Expand All @@ -25,11 +27,20 @@ jobs:
# npm config set node_gyp $(npm prefix -g)/lib/node_modules/node-gyp/bin/node-gyp.js
- name: Install dependencies
run: yarn install --immutable
- name: Pre-release stability checks
run: yarn pre-release:check
- name: Build and Release
run: yarn release
run: |
if [ -n "${CSC_LINK:-}" ] && [ -n "${CSC_KEY_PASSWORD:-}" ]; then
yarn release
else
echo "Code signing secrets are missing/invalid; building unsigned macOS artifacts."
unset CSC_LINK CSC_KEY_PASSWORD CSC_NAME
CSC_IDENTITY_AUTO_DISCOVERY=false yarn release
fi

MacOs:
runs-on: macos-13
runs-on: macos-latest
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
Expand Down Expand Up @@ -79,4 +90,4 @@ jobs:
- name: Install dependencies
run: yarn install --immutable
- name: Build and Release
run: yarn release
run: yarn release
57 changes: 43 additions & 14 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,18 +1,32 @@
name: Release
on:
push:
branches:
- release
release:
types:
- published
workflow_dispatch:
inputs:
tag:
description: "Existing release tag (example: 1.1.0)"
required: true
type: string

permissions:
contents: write
jobs:
Linux:
runs-on: ubuntu-latest
env:
RELEASE_TAG: ${{ github.event_name == 'workflow_dispatch' && inputs.tag || github.event.release.tag_name }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ELECTRON_DISABLE_SANDBOX: "1"
ELECTRON_NO_SANDBOX: "1"
GOOGLE_CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }}
GOOGLE_CLIENT_SECRET: ${{ secrets.GOOGLE_CLIENT_SECRET }}
steps:
- uses: actions/checkout@master
- uses: actions/setup-node@master
- uses: actions/checkout@v4
with:
ref: refs/tags/${{ env.RELEASE_TAG }}
- uses: actions/setup-node@v4
with:
node-version: "18"
cache: "yarn"
Expand All @@ -24,12 +38,22 @@ jobs:
# npm config set node_gyp $(npm prefix -g)/lib/node_modules/node-gyp/bin/node-gyp.js
- name: Install dependencies
run: yarn install --immutable
- name: Pre-release stability checks
run: yarn pre-release:check
- name: Build and Release
run: yarn release
run: |
if [ -n "${CSC_LINK:-}" ] && [ -n "${CSC_KEY_PASSWORD:-}" ]; then
yarn build && yarn workspace station-desktop-app run release:publish
else
echo "Code signing secrets are missing/invalid; building unsigned macOS artifacts."
unset CSC_LINK CSC_KEY_PASSWORD CSC_NAME
CSC_IDENTITY_AUTO_DISCOVERY=false yarn build && yarn workspace station-desktop-app run release:publish
fi

MacOs:
runs-on: macos-13
runs-on: macos-latest
env:
RELEASE_TAG: ${{ github.event_name == 'workflow_dispatch' && inputs.tag || github.event.release.tag_name }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
CSC_LINK: ${{ secrets.CSC_LINK }}
Expand All @@ -39,10 +63,12 @@ jobs:
GOOGLE_CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }}
GOOGLE_CLIENT_SECRET: ${{ secrets.GOOGLE_CLIENT_SECRET }}
steps:
- uses: actions/checkout@master
- uses: actions/setup-node@master
- uses: actions/checkout@v4
with:
node-version: "18"
ref: refs/tags/${{ env.RELEASE_TAG }}
- uses: actions/setup-node@v4
with:
node-version: "20"
cache: "yarn"
- name: Configure Node
run: |
Expand All @@ -53,19 +79,22 @@ jobs:
- name: Install dependencies
run: yarn install --immutable
- name: Build and Release
run: yarn release
run: yarn build && yarn workspace station-desktop-app run release:publish

Windows:
runs-on: windows-2019
env:
RELEASE_TAG: ${{ github.event_name == 'workflow_dispatch' && inputs.tag || github.event.release.tag_name }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
CSC_LINK: ${{ secrets.CSC_LINK }}
GOOGLE_CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }}
GOOGLE_CLIENT_SECRET: ${{ secrets.GOOGLE_CLIENT_SECRET }}
steps:
- uses: actions/checkout@master
- uses: actions/setup-node@master
- uses: actions/checkout@v4
with:
ref: refs/tags/${{ env.RELEASE_TAG }}
- uses: actions/setup-node@v4
with:
node-version: "18"
- name: Configure Node
Expand All @@ -78,4 +107,4 @@ jobs:
- name: Install dependencies
run: yarn install --immutable
- name: Build and Release
run: yarn release
run: yarn build && yarn workspace station-desktop-app run release:publish
17 changes: 17 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,23 @@ on:
- "README.md"
- "CHANGELOG.md"
jobs:
Stability-Baseline:
runs-on: ubuntu-latest
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ELECTRON_DISABLE_SANDBOX: "1"
ELECTRON_NO_SANDBOX: "1"
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "22"
cache: "yarn"
- name: Install dependencies
run: yarn install --immutable
- name: Pre-release stability checks
run: yarn pre-release:check

Linux:
runs-on: ubuntu-latest
env:
Expand Down
35 changes: 35 additions & 0 deletions .github/workflows/version-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: Version & Release
on:
push:
branches:
- main

permissions:
contents: write
issues: write
pull-requests: write

jobs:
semantic-release:
runs-on: ubuntu-latest
env:
ELECTRON_DISABLE_SANDBOX: "1"
ELECTRON_NO_SANDBOX: "1"
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-node@v4
with:
node-version: "22"
cache: yarn
- name: Install dependencies
run: yarn install --immutable
- name: Pre-release stability checks
run: yarn pre-release:check
- name: Semantic release
run: npx semantic-release
env:
# Prefer a PAT so downstream workflows (Release) are triggered by created tags/releases.
GH_TOKEN: ${{ secrets.RELEASE_TOKEN != '' && secrets.RELEASE_TOKEN || secrets.GITHUB_TOKEN }}
GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN != '' && secrets.RELEASE_TOKEN || secrets.GITHUB_TOKEN }}
2 changes: 1 addition & 1 deletion .npmrc
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
runtime = electron
disturl = https://electronjs.org/headers
target = 27.3.11
target = 31.7.7
2 changes: 1 addition & 1 deletion .nvmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
18.15.0
22.13.1
22 changes: 22 additions & 0 deletions .releaserc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"branches": ["main"],
"tagFormat": "${version}",
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
[
"@semantic-release/changelog",
{
"changelogFile": "CHANGELOG.md"
}
],
[
"@semantic-release/git",
{
"assets": ["CHANGELOG.md"],
"message": "chore(release): ${nextRelease.version} [skip ci]\\n\\n${nextRelease.notes}"
}
],
"@semantic-release/github"
]
}
Loading