Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
116 commits
Select commit Hold shift + click to select a range
cd98819
Add logging requirements to AI instructions and fix debug output (ref…
fxstein Jul 1, 2025
024da7f
Implement enhanced default behavior with dry-run support (refs #73)
fxstein Jul 2, 2025
2f84d0f
Robust SD card naming config fallback: always use defaults in all con…
fxstein Jul 2, 2025
89c9cea
Add --rename-cards option to goprox CLI with dry-run support for SD c…
fxstein Jul 2, 2025
e28881e
Add automated Git hooks setup with .githooks directory (refs #73)
fxstein Jul 2, 2025
d0a27b2
Add automatic Git hooks setup via post-merge hook (refs #73)
fxstein Jul 2, 2025
0f988c4
Enhance pre-commit hook with YAML linting and logger usage checks (re…
fxstein Jul 2, 2025
eda79f3
Add post-commit hook with helpful feedback and tips (refs #73)
fxstein Jul 2, 2025
ba78cf3
Revert "Robust SD card naming config fallback: always use defaults in…
fxstein Jul 2, 2025
e0db1a2
Robust SD card naming config fallback: always use defaults in all con…
fxstein Jul 2, 2025
3e9254f
Add SD card renaming configuration and module (refs #73)
fxstein Jul 2, 2025
df2bb77
Add comprehensive configuration strategy and migration plan (refs #73)
fxstein Jul 2, 2025
54a30c1
Consolidate Git hooks system: remove legacy setup and enhance auto-co…
fxstein Jul 2, 2025
bb2f272
feat: complete hook system consolidation with comprehensive testing (…
fxstein Jul 2, 2025
8623ea2
docs: add comprehensive hook system developer documentation (refs #73)
fxstein Jul 2, 2025
f7cdcaa
feat: add file header validation and JSON linting to pre-commit hooks…
fxstein Jul 2, 2025
4d6f96e
feat: add comprehensive hook health check script (refs #73)
fxstein Jul 2, 2025
b54772d
Revert "chore: remove obsolete firmware directories and files after r…
fxstein Jul 2, 2025
b30c95a
Revert "Revert "chore: remove obsolete firmware directories and files…
fxstein Jul 2, 2025
7e0ab52
fix: restore consolidated firmware tree structure (refs #66)
fxstein Jul 2, 2025
f90cda1
chore: add pre-commit protection against unintentional deletes in fir…
fxstein Jul 2, 2025
3c3bdf2
Fix firmware-focused workflow status reporting and GOPROX_HOME detect…
fxstein Jul 3, 2025
a01635f
Fix card renaming edge case in firmware-focused workflow (refs #73)
fxstein Jul 3, 2025
154c610
fix: remove system command mocks and enhance logger with 8kB rotation…
fxstein Jul 3, 2025
f5c134f
feat: Add SD card UUID output and logging to all workflows (refs #71 …
fxstein Jul 3, 2025
0a14daa
feat: Add comprehensive use cases section to Intelligent Media Manage…
fxstein Jul 3, 2025
ebb9061
feat: Add GoProX version tracking and reprocessing use case (refs #73)
fxstein Jul 4, 2025
2ee15e6
feat: Add comprehensive logging and traceability system (refs #73)
fxstein Jul 4, 2025
39e4dd8
feat: Extract use cases to central document for cross-feature referen…
fxstein Jul 4, 2025
0f4e10f
feat: Add GPS track import/export use case for trip organization (ref…
fxstein Jul 4, 2025
c8530cd
feat: Add Apple Photos integration and geo location marker detection …
fxstein Jul 4, 2025
5dc02ff
feat: Add trip reports and content generation use case (refs #73)
fxstein Jul 4, 2025
d628594
feat: Add video production provenance tracking use case (refs #73)
fxstein Jul 4, 2025
c016851
feat: Add copyright tracking and management use case (refs #73)
fxstein Jul 4, 2025
9868d13
feat: Add multi-manufacturer media integration use case (refs #73)
fxstein Jul 4, 2025
24cdc10
feat: Add comprehensive summary section to use cases document (refs #73)
fxstein Jul 4, 2025
3fa3d54
docs: Remove corporate language from use cases summary (refs #73)
fxstein Jul 4, 2025
f4dca57
docs: Add use cases reference to feature-planning README (refs #73)
fxstein Jul 4, 2025
bd16f63
Unify goprox workflows: --verbose only affects logging, not workflow …
fxstein Jul 4, 2025
7aceee1
chore(setup): automate Homebrew dependency setup after clone/merge (r…
fxstein Jul 4, 2025
29c1f02
feat: enhance --archive and --firmware to auto-detect all GoPro SD ca…
fxstein Jul 4, 2025
204515d
fix: ensure firmware cache is always used, unify cache file naming, a…
fxstein Jul 4, 2025
48cb6b1
docs: add critical Git Operations section to prevent interactive mode…
fxstein Jul 4, 2025
418a5e0
feat: add auto-detection for --clean option with comprehensive safety…
fxstein Jul 4, 2025
145fe2a
docs: Add comprehensive force mode protection design (refs #73)
fxstein Jul 4, 2025
dbc40f2
docs: add Git Rebase Debugging section to prevent automatic rebases (…
fxstein Jul 4, 2025
bfa40d0
feat: implement comprehensive force mode protection system (refs #73)
fxstein Jul 4, 2025
c1d10f5
fix: make --eject always proceed without user confirmation (refs #73)
fxstein Jul 4, 2025
3e54ea7
feat: remove --firmware-focused option and always auto-rename cards (…
fxstein Jul 4, 2025
4704599
fix: correct force mode logic and add dry-run support to archive func…
fxstein Jul 4, 2025
1b9833b
feat: implement timestamp-based archive detection to handle re-insert…
fxstein Jul 4, 2025
3b23bca
docs: update firmware directory structure references to reflect conso…
fxstein Jul 5, 2025
40fe44d
fix: restore MISC/firmware/ reference for SD card structure (refs #73…
fxstein Jul 5, 2025
4b8f8f6
feat: enhance auto-renaming with verbose output and fix firmware-labs…
fxstein Jul 5, 2025
d77a4a0
fix: resolve false positive mountoptions validation warning (refs #73)
fxstein Jul 6, 2025
cd44197
fix: only show auto-rename header when GoPro SD cards are found (refs…
fxstein Jul 6, 2025
5797500
feat: add GoPro SD card count summary to default behavior (refs #73)
fxstein Jul 6, 2025
04ba81f
feat: enhance firmware status display and renaming messages (refs #73)
fxstein Jul 6, 2025
9ae3911
feat: add archive status and new media summary to card detection (ref…
fxstein Jul 6, 2025
7b1dd04
feat: enhance SD card ejection safety and user messaging (refs #73)
fxstein Jul 6, 2025
1be14ce
feat: implement simple commit-msg hook to prevent branch divergence (…
fxstein Jul 6, 2025
5617665
fix: yamllint compliance for config/goprox-settings.yaml (refs #73)
fxstein Jul 6, 2025
31060f1
fix: make core scripts executable for CI environment (refs #73)
fxstein Jul 6, 2025
38041a5
fix: make core scripts executable in CI workflow (refs #73)
fxstein Jul 7, 2025
0d1b392
Document GitHub CLI PAGER environment variable issue (refs #73)
fxstein Jul 7, 2025
94d50fa
Fix _apply_force_mode function availability in CI (refs #73)
fxstein Jul 7, 2025
8a3c270
Ensure output directory is created for CI/CD test artifacts (refs #73)
fxstein Jul 7, 2025
4fa4e08
Add debug output to validation script for CI directory creation issue…
fxstein Jul 7, 2025
5a3a2c7
Enhance debug output to capture GoProX test mode output in CI (refs #73)
fxstein Jul 7, 2025
5a89a9b
Add debug output to mkdir commands in test mode (refs #73)
fxstein Jul 7, 2025
704a87b
Fix test mode library validation issue (refs #73)
fxstein Jul 7, 2025
8d60307
Add comprehensive debug output to script startup (refs #73)
fxstein Jul 7, 2025
9152420
Add script execution debugging to validation (refs #73)
fxstein Jul 7, 2025
314a885
Add bash execution test to see script error details (refs #73)
fxstein Jul 7, 2025
e73ca52
refactor: implement simplified CI/CD test structure (refs #72)
fxstein Jul 7, 2025
2baa54f
feat: implement standardized test script structure with verbose/debug…
fxstein Jul 7, 2025
2788cf9
refactor: implement improved test script naming convention (refs #72)
fxstein Jul 7, 2025
529f9f0
docs(testing): restructure and standardize testing documentation fram…
fxstein Jul 7, 2025
dd62619
fix(testing): add debug output to GoProX test mode validation (refs #88)
fxstein Jul 7, 2025
5da0940
fix(testing): add detailed debug output and enable debug mode in CI (…
fxstein Jul 7, 2025
e163c26
fix(testing): add debug output to GoProX test mode to diagnose CI iss…
fxstein Jul 7, 2025
1724f86
fix(testing): add comprehensive debug output to track GoProX executio…
fxstein Jul 7, 2025
41157cb
fix(testing): handle missing /Volumes directory on Linux in CI (refs …
fxstein Jul 7, 2025
ca8c3bf
fix(testing): properly validate GoProX test mode success (refs #88)
fxstein Jul 7, 2025
90e35ad
docs(testing): document and implement standardized handling for inter…
fxstein Jul 7, 2025
1912d47
fix(testing): ensure NON_INTERACTIVE env variable disables all prompt…
fxstein Jul 7, 2025
caa9a1b
enhance(testing): improve goprox --test failure output with detailed …
fxstein Jul 7, 2025
8cad8be
feat(testing): add comprehensive file path logging to goprox --test m…
fxstein Jul 7, 2025
419f7e7
feat: add detailed file listing before and after test operations (ref…
fxstein Jul 7, 2025
7da864b
fix: add LFS configuration to GitHub Actions workflows (refs #73)
fxstein Jul 7, 2025
3e9053d
fix: ensure LFS is enabled for all test and lint workflows (refs #73)
fxstein Jul 7, 2025
2ed7369
debug: add LFS environment debugging to PR tests workflow (refs #73)
fxstein Jul 7, 2025
2345561
fix: add explicit git lfs pull step to ensure all LFS files are fetch…
fxstein Jul 7, 2025
a00a162
fix: try git lfs fetch --all instead of git lfs pull (refs #73)
fxstein Jul 7, 2025
75429e1
fix: try git lfs checkout based on research findings (refs #73)
fxstein Jul 7, 2025
447a7dd
test: trigger new run with updated LFS budget (refs #73)
fxstein Jul 7, 2025
a4895f2
fix: try git lfs pull instead of git lfs checkout based on research (…
fxstein Jul 7, 2025
23408f2
fix: add second checkout step based on LFS research findings (refs #73)
fxstein Jul 7, 2025
dc44bc7
fix: add .lfsconfig file to improve LFS behavior in CI (refs #73)
fxstein Jul 7, 2025
d564722
fix: update .lfsconfig with only safe, supported options (refs #73)
fxstein Jul 7, 2025
62388de
feat: add Insta360 X3 camera support (draft)
fxstein Jul 7, 2025
7429046
feat: implement workflow analysis and user selection framework (refs …
fxstein Jul 7, 2025
d851fb0
feat: implement centralized exiftool timestamping wrapper (refs #73)
fxstein Jul 7, 2025
7986f9e
feat: implement enhanced default behavior with workflow system (refs …
fxstein Jul 8, 2025
b307607
fix: correct workflow logic to only archive new media (refs #67)
fxstein Jul 8, 2025
b640243
feat: add --force support to enhanced workflow system (refs #67)
fxstein Jul 8, 2025
f88c62c
Fix force mode to allow re-archiving previously archived media (refs …
fxstein Jul 8, 2025
b8bc15c
Clean up dry run output for better readability (refs #73)
fxstein Jul 8, 2025
aa86588
Improve dry-run mode visibility for processing options (refs #73)
fxstein Jul 8, 2025
dcffe02
Add Clean Only workflow option with intelligent archive detection (re…
fxstein Jul 8, 2025
9222465
Improve messaging precision for Clean workflow in force mode (refs #73)
fxstein Jul 8, 2025
ce0207e
Remove empty warning line in Clean workflow confirmation (refs #73)
fxstein Jul 8, 2025
5c682be
Fix remaining 'non-archived' terminology in Clean workflow (refs #73)
fxstein Jul 8, 2025
3fc1ecb
Fix final 'not fully archived' message in clean operation (refs #73)
fxstein Jul 8, 2025
35feef8
Fix clean workflow: precise archive status detection and messaging (r…
fxstein Jul 8, 2025
8e293a3
fix: Eject workflow now available for all detected GoPro cards, not j…
fxstein Jul 8, 2025
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
48 changes: 48 additions & 0 deletions .githooks/commit-msg
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#!/bin/zsh

# GoProX Commit Message Hook
# Ensures all commits reference GitHub issues
#
# IMPORTANT: This is a SIMPLE, FOCUSED solution designed to prevent branch divergence
# caused by commit amending. DO NOT add extra scripts, workflows, or complexity.
#
# Purpose: Block commits without (refs #XX) to prevent the need for amending pushed commits
# Solution: Simple validation only - let the user fix the message and commit again
#
# If you're tempted to add more features here, STOP and ask the user first.
# This hook should remain minimal and focused on its single responsibility.

# Get the commit message from the commit-msg file
commit_msg_file="$1"
commit_msg=$(cat "$commit_msg_file")

# Check if this is a merge commit or revert (allow without issue reference)
if [[ "$commit_msg" =~ ^(Merge|Revert|Reverted) ]]; then
echo "Merge/revert commit detected, skipping issue reference check"
exit 0
fi

# Check if commit message contains GitHub issue reference
# Pattern: (refs #n) or (refs #n #n ...) where n is a number
if [[ "$commit_msg" =~ \(refs\ #[0-9]+(\ #[0-9]+)*\) ]]; then
echo "✅ Commit message contains GitHub issue reference"
exit 0
else
echo "❌ ERROR: Commit message must reference a GitHub issue"
echo ""
echo "Please include a GitHub issue reference in your commit message:"
echo " (refs #123) for a single issue"
echo " (refs #123 #456) for multiple issues"
echo ""
echo "Examples:"
echo " feat: add new configuration option (refs #70)"
echo " fix: resolve parameter parsing issue (refs #45 #67)"
echo ""
echo "Current commit message:"
echo "---"
echo "$commit_msg"
echo "---"
echo ""
echo "Please add the issue reference and try committing again."
exit 1
fi
42 changes: 42 additions & 0 deletions .githooks/post-checkout
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#!/bin/zsh

# GoProX Post-Checkout Hook
# Automatically configures Git hooks after cloning or checking out

# Run setup-hooks.zsh to ensure hooks are configured
if [[ -f scripts/maintenance/setup-hooks.zsh ]]; then
echo "[GoProX] Running setup-hooks.zsh to configure git hooks..."
./scripts/maintenance/setup-hooks.zsh
else
echo "[GoProX] setup-hooks.zsh not found, skipping hook setup."
fi

# Run setup-brew.zsh to install Homebrew dependencies (if Homebrew is available)
if command -v brew &> /dev/null; then
if [[ -f scripts/maintenance/setup-brew.zsh ]]; then
echo "[GoProX] Running setup-brew.zsh to install Homebrew dependencies..."
./scripts/maintenance/setup-brew.zsh
else
echo "[GoProX] setup-brew.zsh not found, skipping Homebrew dependency setup."
fi
else
echo "[GoProX] Homebrew not found, skipping Homebrew dependency setup."
fi

# Only run on initial clone (when previous HEAD is empty)
if [[ -z "$2" ]]; then
echo "🔧 Setting up GoProX Git hooks..."

# Configure Git to use .githooks directory
git config core.hooksPath .githooks

echo "✅ Git hooks configured automatically!"
echo " Commit messages will now require GitHub issue references (refs #123)"
echo " Pre-commit checks will run before each commit"
echo " YAML files will be linted (if yamllint is installed)"
echo " Logger usage will be validated in zsh scripts"
echo ""
echo "💡 Optional: Install yamllint for YAML linting:"
echo " brew install yamllint"
echo " or: pip3 install yamllint"
fi
30 changes: 30 additions & 0 deletions .githooks/post-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#!/bin/zsh

# GoProX Post-commit Hook
# Provides helpful feedback after commits

echo "🎉 Commit successful!"
echo ""

# Check if this is a feature branch
current_branch=$(git branch --show-current)
if [[ "$current_branch" =~ ^feature/ ]]; then
echo "💡 Tip: Consider creating a pull request when ready:"
echo " gh pr create --title \"$(git log -1 --pretty=format:'%s')\""
echo ""
fi

# Check if there are any TODO/FIXME comments in the committed files
committed_files=$(git diff-tree --no-commit-id --name-only -r HEAD)
if echo "$committed_files" | xargs grep -l "TODO\|FIXME" 2>/dev/null; then
echo "⚠️ Note: This commit contains TODO/FIXME comments"
echo " Consider addressing these in future commits"
echo ""
fi

# Check if yamllint is available for future commits
if ! command -v yamllint &> /dev/null; then
echo "💡 Install yamllint for YAML linting in future commits:"
echo " brew install yamllint"
echo ""
fi
47 changes: 47 additions & 0 deletions .githooks/post-merge
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
#!/bin/zsh

# GoProX Post-Merge Hook
# Automatically configures Git hooks after pulling or merging

echo "🔧 Checking GoProX Git hooks configuration..."

# Check if hooks are configured
current_hooks_path=$(git config --local core.hooksPath 2>/dev/null || echo "")

if [[ "$current_hooks_path" != ".githooks" ]]; then
echo "📝 Configuring Git hooks..."
git config --local core.hooksPath .githooks
echo "✅ Git hooks configured automatically!"
echo " Commit messages will now require GitHub issue references (refs #123)"
echo " Pre-commit checks will run before each commit"
echo " YAML files will be linted (if yamllint is installed)"
echo " Logger usage will be validated in zsh scripts"
echo ""
echo "💡 Optional: Install yamllint for YAML linting:"
echo " brew install yamllint"
echo " or: pip3 install yamllint"
else
echo "✅ Git hooks already configured"
fi

# GoProX post-merge hook: auto-configure hooks and install Homebrew dependencies

# Run setup-hooks.zsh to ensure hooks are configured
if [[ -f scripts/maintenance/setup-hooks.zsh ]]; then
echo "[GoProX] Running setup-hooks.zsh to configure git hooks..."
./scripts/maintenance/setup-hooks.zsh
else
echo "[GoProX] setup-hooks.zsh not found, skipping hook setup."
fi

# Run setup-brew.zsh to install Homebrew dependencies (if Homebrew is available)
if command -v brew &> /dev/null; then
if [[ -f scripts/maintenance/setup-brew.zsh ]]; then
echo "[GoProX] Running setup-brew.zsh to install Homebrew dependencies..."
./scripts/maintenance/setup-brew.zsh
else
echo "[GoProX] setup-brew.zsh not found, skipping Homebrew dependency setup."
fi
else
echo "[GoProX] Homebrew not found, skipping Homebrew dependency setup."
fi
124 changes: 124 additions & 0 deletions .githooks/pre-commit
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
#!/bin/zsh

# GoProX Pre-commit Hook
# Runs comprehensive checks before allowing commits

echo "🔍 Running pre-commit checks..."

# Check for TODO/FIXME comments in staged files
if git diff --cached --name-only | xargs grep -l "TODO\|FIXME" 2>/dev/null; then
echo "⚠️ Warning: Found TODO/FIXME comments in staged files"
echo " Consider addressing these before committing"
fi

# Check for large files (>10MB)
large_files=$(git diff --cached --name-only | xargs ls -la 2>/dev/null | awk '$5 > 10485760 {print $9}')
if [[ -n "$large_files" ]]; then
echo "⚠️ Warning: Found files larger than 10MB"
echo " Consider using Git LFS for large files"
fi

# YAML Linting (if yamllint is available)
if command -v yamllint &> /dev/null; then
echo "🔍 Running YAML linting..."

# Get staged YAML files
yaml_files=$(git diff --cached --name-only | grep -E '\.(yml|yaml)$' || true)

if [[ -n "$yaml_files" ]]; then
for file in $yaml_files; do
if [[ -f "$file" ]]; then
if ! yamllint -c .yamllint "$file" 2>/dev/null; then
echo "❌ YAML linting failed for $file"
echo " Run: ./scripts/maintenance/fix-yaml-formatting.zsh to auto-fix"
exit 1
fi
fi
done
echo "✅ YAML linting passed"
else
echo "ℹ️ No YAML files staged for linting"
fi
else
echo "ℹ️ yamllint not available - skipping YAML linting"
echo " Install with: brew install yamllint or pip3 install yamllint"
fi

# Check for logger usage in zsh scripts (per design principles)
echo "🔍 Checking logger usage in zsh scripts..."
zsh_files=$(git diff --cached --name-only | grep -E '\.zsh$' || true)
if [[ -n "$zsh_files" ]]; then
for file in $zsh_files; do
if [[ -f "$file" ]]; then
# Skip if it's a core module (they define the logger)
if [[ "$file" != *"/core/"* ]]; then
if ! grep -q "log_" "$file"; then
echo "⚠️ Warning: $file doesn't use logger functions"
echo " Consider using log_info, log_error, etc. for consistent logging"
fi
fi
fi
done
fi

# JSON Linting (if jsonlint is available)
if command -v jsonlint &> /dev/null; then
echo "🔍 Running JSON linting..."

# Get staged JSON files
json_files=$(git diff --cached --name-only | grep -E '\.json$' || true)

if [[ -n "$json_files" ]]; then
for file in $json_files; do
if [[ -f "$file" ]]; then
if ! jsonlint "$file" >/dev/null 2>&1; then
echo "❌ JSON linting failed for $file"
echo " Run: jsonlint $file to see errors"
exit 1
fi
fi
done
echo "✅ JSON linting passed"
else
echo "ℹ️ No JSON files staged for linting"
fi
else
echo "ℹ️ jsonlint not available - skipping JSON linting"
echo " Install with: npm install -g jsonlint"
fi

# Check for file headers (copyright, license, usage patterns)
echo "🔍 Checking file headers..."
staged_files=$(git diff --cached --name-only || true)
if [[ -n "$staged_files" ]]; then
for file in $staged_files; do
if [[ -f "$file" ]]; then
# Check for copyright notices in source files
if [[ "$file" =~ \.(zsh|md|yaml|yml|json)$ ]]; then
if ! head -10 "$file" | grep -q "Copyright\|copyright"; then
echo "⚠️ Warning: $file missing copyright notice"
echo " Consider adding copyright header to file"
fi
fi

# Check for license headers in appropriate files
if [[ "$file" =~ \.(zsh|md)$ ]]; then
if ! head -10 "$file" | grep -q "License\|license"; then
echo "⚠️ Warning: $file missing license header"
echo " Consider adding license information to file"
fi
fi

# Check for usage patterns in documentation
if [[ "$file" =~ \.md$ ]] && [[ "$file" != README.md ]] && [[ "$file" != CONTRIBUTING.md ]]; then
if ! head -10 "$file" | grep -q "Usage\|usage"; then
echo "⚠️ Warning: $file missing usage documentation"
echo " Consider adding usage examples to documentation"
fi
fi
fi
done
fi

echo "✅ Pre-commit checks completed"
exit 0
3 changes: 3 additions & 0 deletions .githooks/pre-push
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/sh
command -v git-lfs >/dev/null 2>&1 || { printf >&2 "\n%s\n\n" "This repository is configured for Git LFS but 'git-lfs' was not found on your path. If you no longer wish to use Git LFS, remove this hook by deleting the 'pre-push' file in the hooks directory (set by 'core.hookspath'; usually '.git/hooks')."; exit 2; }
git lfs pre-push "$@"
94 changes: 94 additions & 0 deletions .github/workflows/integration-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
---
name: "Integration Tests"
on:
push:
branches: ["main", "develop"]
paths-ignore:
- "docs/**"
- "*.md"
- "firmware/**"
- "output/**"

jobs:
integration-validation:
name: "Integration Validation"
runs-on: "ubuntu-latest"
timeout-minutes: 15

steps:
- name: "Checkout code"
uses: actions/checkout@v4
with:
lfs: true

- name: "Install dependencies"
run: |
sudo apt-get update
sudo apt-get install -y zsh exiftool jq python3-pip
pip3 install yamllint

- name: "Make scripts executable"
run: |
chmod +x scripts/testing/*.zsh
chmod +x scripts/core/*.zsh
chmod +x goprox

- name: "Setup output directories"
run: |
mkdir -p output/test-results
mkdir -p output/test-temp

- name: "Run comprehensive validation"
run: |
echo "🧪 Running comprehensive validation..."
zsh ./scripts/testing/validate-integration.zsh

- name: "Run file comparison tests"
run: |
echo "🧪 Running file comparison tests..."
zsh ./scripts/testing/test-regression.zsh

- name: "Upload test results"
if: always()
uses: actions/upload-artifact@v4
with:
name: "integration-test-results"
path: "output/"
retention-days: 7

test-summary:
name: "Test Summary"
needs: integration-validation
runs-on: "ubuntu-latest"
if: always()

steps:
- name: "Checkout code"
uses: actions/checkout@v4
with:
lfs: true

- name: "Download test results"
uses: actions/download-artifact@v4
with:
name: "integration-test-results"
path: "test-results"

- name: "Generate summary"
run: |
echo "📊 Integration Test Summary"
echo "=========================="
echo "Generated: $(date)"
echo ""

if [[ -d "test-results" ]]; then
find test-results -name "*.txt" -type f | while read -r report; do
echo "📋 $(basename "$report"):"
cat "$report"
echo ""
echo "---"
echo ""
done
else
echo "No test results found"
fi
Loading
Loading