Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
6ce596f
feat: required operators
Svannte Jun 23, 2026
f93bd38
fix: styles
Svannte Jun 25, 2026
509a2cb
feat: merge
Svannte Jun 25, 2026
0df379a
test: fix e2e disposition flow and create English scenario variant
SoiBien-AI Jun 30, 2026
dcb2493
[feat] Per-order machines to run supervisor view #89
ElNinio978 Jun 30, 2026
7fe83c2
Update tests and localization
SoiBien-AI Jun 30, 2026
4f302a8
fix to test can capture all step from multi users by logout and login
SoiBien-AI Jul 1, 2026
1ea24e8
fix test error
SoiBien-AI Jul 1, 2026
b5da428
clean: remove temporary development files and compiled output
SoiBien-AI Jul 1, 2026
ac660a7
merge: origin/develop into recreate-test (resolved conflict on specs …
SoiBien-AI Jul 1, 2026
957e84d
translate: translate Operator Workstation and Work Order details to V…
SoiBien-AI Jul 1, 2026
e269789
fix: address code review comments for i18n localization and backend l…
SoiBien-AI Jul 2, 2026
73cb643
fix: address remaining PR comments on docker-compose mount, reset scr…
SoiBien-AI Jul 2, 2026
25b5aa8
fix: adjust lot pick layout font sizes and make E2E dropdown lot sele…
SoiBien-AI Jul 2, 2026
e552f61
fix: localize Start and Complete step buttons under Operator panel
SoiBien-AI Jul 2, 2026
743b518
style: polish LotPickModal row spacing and fonts to avoid vertical ov…
SoiBien-AI Jul 2, 2026
5332a55
fix: wait for start API response before expecting step Complete butto…
SoiBien-AI Jul 2, 2026
59f2203
fix: refine confirmBtn locator in E2E spec to avoid partial text matc…
SoiBien-AI Jul 2, 2026
7c3dc6e
fix: unconditionally scan and fill selects in E2E lot picking modal
SoiBien-AI Jul 2, 2026
a54a00d
fix: refine createBtn button locator regex pattern
SoiBien-AI Jul 2, 2026
22c36de
fix: use explicit workstation button label in E2E spec to avoid stric…
SoiBien-AI Jul 2, 2026
6b70b04
fix: streamline startBtn visibility and click handler logic in E2E spec
SoiBien-AI Jul 2, 2026
e3bdcee
fix: add robust re-click startBtn fallback to start batch step in E2E…
SoiBien-AI Jul 2, 2026
2c0587c
translate: localize work order operator modals and actions to support…
SoiBien-AI Jul 2, 2026
0fa55f3
fix(materials): make material_type_id optional in StoreMaterialRequest
SoiBien-AI Jul 2, 2026
bbba570
chore: remove reset-test cmd files
SoiBien-AI Jul 2, 2026
371910f
fix(i18n): address PR reviews for operator controllers translation gaps
SoiBien-AI Jul 2, 2026
f3888f9
chore: remove car-production-buildout spec files
SoiBien-AI Jul 2, 2026
3f9d593
fix(i18n): align media type badge localization mapping key with selec…
SoiBien-AI Jul 2, 2026
69d4627
feat: mobile
Svannte Jul 5, 2026
3131c5a
fix: restore removed migration 2026_06_18_120000 (make material_type_…
SoiBien-AI Jul 7, 2026
6026084
Merge pull request #169 from SoiBien-AI/feat/translate-develop
jakub-przepiora Jul 7, 2026
3762d59
Address order machines review feedback
ElNinio978 Jul 7, 2026
0906143
Merge pull request #171 from ElNinio978/per-order-machines-supervisor…
jakub-przepiora Jul 7, 2026
3ff8bc2
fix: logs
Svannte Jul 8, 2026
51b40ce
merge
Svannte Jul 8, 2026
3539d17
feat: accepnt informations
JanKolo04 Jul 8, 2026
8045645
feat: finish up whole feature
JanKolo04 Jul 9, 2026
49267fe
fix: address CodeRabbit review on customer/priority PR
JanKolo04 Jul 10, 2026
db15817
Merge pull request #173 from Mes-Open/feature/37-customer-management-…
jakub-przepiora Jul 10, 2026
2f0238a
Merge origin/develop into feature/95-read-confirmation
JanKolo04 Jul 10, 2026
bb5a818
Merge pull request #172 from Mes-Open/feature/95-read-confirmation
jakub-przepiora Jul 10, 2026
69f99f9
merge
Svannte Jul 16, 2026
f0468ac
Merge pull request #148 from Mes-Open/schedule-capacity-view
Svannte Jul 16, 2026
6ff6dee
feat(workstation): shop-floor device registration + live admin roster…
jakub-przepiora Jul 19, 2026
988e209
ci(release): build desktop installers (win/mac/linux) + Android apk (…
jakub-przepiora Jul 19, 2026
2ff45e8
feat(desktop): OpenMES Desktop app (Tauri) + unattended install prese…
jakub-przepiora Jul 19, 2026
2201038
feat(work-orders): add elapsed-time "Age" column to work-order lists …
JanKolo04 Jul 19, 2026
761e1e6
fix(routes): drop dangling __e2e__ block; 404 (not 500) on non-numeri…
jakub-przepiora Jul 19, 2026
acd007e
feat(bom): select multi bom in orders (#183)
JanKolo04 Jul 19, 2026
8ec1ffa
fix(e2e): close unterminated test.describe in material-hold-release s…
jakub-przepiora Jul 19, 2026
17573c0
chore(release): v0.17.0
jakub-przepiora Jul 19, 2026
ce06162
Merge remote-tracking branch 'origin/main' into release/v0.17.0
jakub-przepiora Jul 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
9 changes: 9 additions & 0 deletions .githooks/pre-commit
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,15 @@ if [ ! -f public/build/manifest.json ]; then
npm run build || exit 1
fi

# Frontend unit tests (Vitest) - same step CI runs. Fast (~sub-second); skipped
# by the SKIP_TESTS escape hatch above along with the PHP suite.
echo "pre-commit: running frontend tests (npm test)..."
npm test || {
echo ""
echo "pre-commit: FRONTEND TESTS FAILED - commit aborted."
exit 1
}

# Same gate as CI's `php artisan test --stop-on-failure`. Invoked through
# phpunit directly so the raised memory limit applies to the test process
# itself (artisan test spawns children that ignore -d on the parent).
Expand Down
199 changes: 191 additions & 8 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,14 @@ on:
required: false

jobs:
release:
name: Create Release
# ── Web ZIP + GitHub Release (creates the release the other jobs upload to) ──
web:
name: Create Release (web ZIP)
runs-on: ubuntu-latest
permissions:
contents: write
outputs:
version: ${{ steps.version.outputs.version }}

steps:
- name: Checkout
Expand Down Expand Up @@ -83,9 +86,11 @@ jobs:
BODY="${CUSTOM}"$'\n\n'
fi
INSTALL="## Installation"$'\n\n'
INSTALL="${INSTALL}Download **\`openmmes-${VERSION}.zip\`** below — it is **self-contained** (PHP dependencies in \`vendor/\` and the built frontend in \`backend/public/build/\` are already bundled, so no \`composer install\` or \`npm build\` is required)."$'\n\n'
INSTALL="${INSTALL}**Shared hosting (no terminal):** unzip, upload the folder to your web host, point the document root at the package root, then open the URL — the browser-based setup wizard handles environment, database and the admin account."$'\n\n'
INSTALL="${INSTALL}**Docker:** unzip and run \`docker compose up -d\` from the package root (or \`bash install.sh\`)."$'\n\n'
INSTALL="${INSTALL}**Web / self-hosted:** download **\`openmmes-${VERSION}.zip\`** below — it is **self-contained** (PHP dependencies in \`vendor/\` and the built frontend in \`backend/public/build/\` are already bundled, so no \`composer install\` or \`npm build\` is required)."$'\n\n'
INSTALL="${INSTALL}**Desktop:** grab the installer for your OS — Windows \`*-setup.exe\`, macOS \`*.dmg\`, or Linux \`*.deb\` / \`*.rpm\`. They bundle PHP + the backend and run OpenMES as a local app / LAN server."$'\n\n'
INSTALL="${INSTALL}**Mobile (Android):** install \`openmes-mobile-${VERSION}.apk\` and point it at your OpenMES server."$'\n\n'
INSTALL="${INSTALL}**Shared hosting (no terminal):** unzip the web package, upload the folder, point the document root at the package root, then open the URL — the browser-based setup wizard handles environment, database and the admin account."$'\n\n'
INSTALL="${INSTALL}**Docker:** unzip the web package and run \`docker compose up -d\` from the package root (or \`bash install.sh\`)."$'\n\n'
BODY="${BODY}${INSTALL}## Changes"$'\n'"${LOG}"
echo "body<<EOF" >> $GITHUB_OUTPUT
echo "$BODY" >> $GITHUB_OUTPUT
Expand All @@ -94,9 +99,6 @@ jobs:
# NOTE: the version bump (backend/config/version.php) and CHANGELOG entry
# are committed manually during release prep on develop -> main BEFORE the
# tag is pushed, so the tagged tree already carries the correct version.
# The workflow intentionally does NOT push to main here: main is a
# protected branch and a bot push is rejected (GH013 ruleset violation),
# which previously aborted the whole release before the artifact was built.
- name: Verify tagged version matches the release
env:
VERSION: ${{ steps.version.outputs.version }}
Expand Down Expand Up @@ -160,3 +162,184 @@ jobs:
draft: false
prerelease: false
files: ${{ env.zip_name }}

# ── Desktop installers (Windows .exe, macOS .dmg, Linux .deb/.rpm) ───────────
desktop:
name: Desktop (${{ matrix.label }})
needs: web
permissions:
contents: write
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-22.04
label: linux
bundles: 'deb,rpm'
res_map: '{"resources/backend":"backend","resources/php":"php"}'
artifacts: |
desktop/src-tauri/target/release/bundle/deb/*.deb
desktop/src-tauri/target/release/bundle/rpm/*.rpm
- os: macos-latest
label: macos
bundles: 'dmg'
res_map: '{"resources/backend":"backend","resources/php":"php"}'
artifacts: |
desktop/src-tauri/target/release/bundle/dmg/*.dmg
- os: windows-latest
label: windows
bundles: 'nsis'
res_map: '{"resources/backend":"backend","resources/php":"php","resources/pgsql":"pgsql"}'
artifacts: |
desktop/src-tauri/target/release/bundle/nsis/*-setup.exe
runs-on: ${{ matrix.os }}

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20'

- name: Setup PHP (to build the backend that gets bundled)
uses: shivammathur/setup-php@v2
with:
php-version: '8.3'
extensions: pdo, pgsql, mbstring, zip, gd, bcmath
tools: composer

- name: Setup Rust
uses: dtolnay/rust-toolchain@stable

- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: desktop/src-tauri

- name: Linux system dependencies (Tauri)
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev \
librsvg2-dev patchelf build-essential curl wget file libxdo-dev libssl-dev

- name: Build backend (vendor + frontend) for bundling
working-directory: backend
shell: bash
run: |
composer install --no-dev --optimize-autoloader --no-interaction --ignore-platform-reqs
rm -f vendor/composer/platform_check.php
npm ci
npm run build

- name: Fetch bundled PHP (+ PostgreSQL on Windows) runtime
shell: bash
run: |
set -euo pipefail
RES="desktop/src-tauri/resources"
mkdir -p "$RES/php"
PHP_VER="8.3.31"
case "$RUNNER_OS" in
Linux)
curl -fL --retry 3 -o /tmp/php.tgz "https://dl.static-php.dev/static-php-cli/common/php-${PHP_VER}-cli-linux-x86_64.tar.gz"
tar xzf /tmp/php.tgz -C "$RES/php"
chmod +x "$RES/php/php"
;;
macOS)
# macos-latest is arm64 (Apple Silicon)
curl -fL --retry 3 -o /tmp/php.tgz "https://dl.static-php.dev/static-php-cli/common/php-${PHP_VER}-cli-macos-aarch64.tar.gz"
tar xzf /tmp/php.tgz -C "$RES/php"
chmod +x "$RES/php/php"
;;
Windows)
curl -fL --retry 3 -o /tmp/php.zip "https://windows.php.net/downloads/releases/latest/php-8.3-nts-Win32-vs16-x64-latest.zip"
unzip -q /tmp/php.zip -d "$RES/php"
curl -fL --retry 3 -o /tmp/pg.jar "https://repo1.maven.org/maven2/io/zonky/test/postgres/embedded-postgres-binaries-windows-amd64/16.4.0/embedded-postgres-binaries-windows-amd64-16.4.0.jar"
unzip -o -q /tmp/pg.jar postgres-windows-x86_64.txz -d /tmp
mkdir -p "$RES/pgsql"
tar xf /tmp/postgres-windows-x86_64.txz -C "$RES/pgsql"
;;
esac

- name: Bundle backend into desktop resources
shell: bash
run: bash desktop/scripts/bundle-resources.sh "$PWD/backend"

- name: Install desktop deps
working-directory: desktop
shell: bash
run: npm ci

- name: Build desktop bundles
working-directory: desktop
shell: bash
env:
VERSION: ${{ needs.web.outputs.version }}
RES_MAP: ${{ matrix.res_map }}
BUNDLES: ${{ matrix.bundles }}
run: |
set -euo pipefail
VER="${VERSION#v}"
CONFIG=$(printf '{"version":"%s","bundle":{"resources":%s}}' "$VER" "$RES_MAP")
echo "tauri build --bundles $BUNDLES --config $CONFIG"
npm run tauri build -- --bundles "$BUNDLES" --config "$CONFIG"

- name: Upload desktop installers to the release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ needs.web.outputs.version }}
files: ${{ matrix.artifacts }}

# ── Mobile (Android .apk via Expo prebuild + Gradle) ─────────────────────────
mobile:
name: Mobile (Android apk)
needs: web
runs-on: ubuntu-latest
permissions:
contents: write

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20'

- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '17'

- name: Setup Android SDK
uses: android-actions/setup-android@v3

- name: Install mobile dependencies
working-directory: mobile
run: npm ci

- name: Prebuild native Android project
working-directory: mobile
run: npx expo prebuild --platform android --no-install

- name: Build release APK
working-directory: mobile/android
run: ./gradlew assembleRelease --no-daemon

- name: Rename APK
shell: bash
run: |
VERSION="${{ needs.web.outputs.version }}"
SRC=$(find mobile/android/app/build/outputs/apk/release -name "*.apk" | head -1)
cp "$SRC" "openmes-mobile-${VERSION}.apk"
echo "apk=openmes-mobile-${VERSION}.apk" >> $GITHUB_ENV

- name: Upload APK to the release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ needs.web.outputs.version }}
files: ${{ env.apk }}
4 changes: 4 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,10 @@ jobs:
working-directory: backend
run: npm ci && npm run build

- name: Run frontend tests
working-directory: backend
run: npm test

- name: Copy .env and generate key
working-directory: backend
run: |
Expand Down
14 changes: 14 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ backend/yarn-error.log

# Frontend directory (removed — Blade templates used instead)
/frontend/
/design

# AI assistant context files (CLAUDE.md is tracked — shared project
# conventions for AI assistants; everything else stays local)
Expand Down Expand Up @@ -81,3 +82,16 @@ cloudflared.deb
# (Packaging was promoted to core; remaining modules ship via private repos)
modules/*
!modules/README.md

# Desktop app (Tauri) — kompilacje i wbudowywane runtime'y (nigdy nie commitować)
desktop/node_modules/
desktop/dist/
desktop/src-tauri/target/
desktop/src-tauri/gen/
desktop/src-tauri/resources/
desktop/winphp-staging/
desktop/release/
desktop/.linux-php-backup/
desktop/.tauri.conf.json.bak

.playwright-mcp
Loading
Loading