| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 |
- name: Installer Checks
- on:
- pull_request:
- branches: [main]
- paths:
- - 'install.sh'
- - 'update.sh'
- - 'registry.json'
- - 'scripts/tests/test-*.sh'
- push:
- branches: [main]
- paths:
- - 'install.sh'
- - 'update.sh'
- workflow_dispatch:
- jobs:
- shellcheck:
- name: ShellCheck Analysis
- runs-on: ubuntu-latest
-
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
-
- - name: Run ShellCheck on install.sh
- uses: ludeeus/action-shellcheck@master
- with:
- scandir: '.'
- additional_files: 'install.sh update.sh'
- severity: warning
-
- - name: Summary
- if: success()
- run: |
- echo "## ✅ ShellCheck Passed" >> $GITHUB_STEP_SUMMARY
- echo "No shell script issues found in install.sh or update.sh" >> $GITHUB_STEP_SUMMARY
- syntax-check:
- name: Bash Syntax Validation
- runs-on: ubuntu-latest
-
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
-
- - name: Check install.sh syntax
- run: bash -n install.sh
-
- - name: Check update.sh syntax
- run: bash -n update.sh
-
- - name: Check test scripts syntax
- run: |
- for script in scripts/tests/test-*.sh; do
- echo "Checking $script..."
- bash -n "$script"
- done
-
- - name: Summary
- run: |
- echo "## ✅ Syntax Check Passed" >> $GITHUB_STEP_SUMMARY
- echo "All shell scripts have valid syntax" >> $GITHUB_STEP_SUMMARY
- non-interactive-tests:
- name: Non-Interactive Mode Tests
- runs-on: ${{ matrix.os }}
- needs: [shellcheck, syntax-check]
- strategy:
- matrix:
- os: [ubuntu-latest, macos-latest]
-
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
-
- - name: Install jq (Ubuntu)
- if: matrix.os == 'ubuntu-latest'
- run: sudo apt-get install -y jq
-
- - name: Install jq (macOS)
- if: matrix.os == 'macos-latest'
- run: brew install jq || true
-
- - name: Run non-interactive tests
- run: bash scripts/tests/test-non-interactive.sh
-
- - name: Summary
- if: success()
- run: |
- echo "## ✅ Non-Interactive Tests Passed (${{ matrix.os }})" >> $GITHUB_STEP_SUMMARY
- echo "All piped execution scenarios work correctly" >> $GITHUB_STEP_SUMMARY
- e2e-tests:
- name: End-to-End Installation Tests
- runs-on: ${{ matrix.os }}
- needs: [shellcheck, syntax-check]
- strategy:
- matrix:
- os: [ubuntu-latest, macos-latest]
-
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
-
- - name: Install jq (Ubuntu)
- if: matrix.os == 'ubuntu-latest'
- run: sudo apt-get install -y jq
-
- - name: Install jq (macOS)
- if: matrix.os == 'macos-latest'
- run: brew install jq || true
-
- - name: Run E2E tests
- env:
- OPENCODE_BRANCH: ${{ github.head_ref || github.ref_name }}
- run: bash scripts/tests/test-e2e-install.sh
-
- - name: Summary
- if: success()
- run: |
- echo "## ✅ E2E Tests Passed (${{ matrix.os }})" >> $GITHUB_STEP_SUMMARY
- echo "Full installation workflow validated" >> $GITHUB_STEP_SUMMARY
- compatibility-tests:
- name: Compatibility Tests
- runs-on: ${{ matrix.os }}
- needs: [shellcheck, syntax-check]
- strategy:
- matrix:
- os: [ubuntu-latest, macos-latest]
-
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
-
- - name: Install jq (Ubuntu)
- if: matrix.os == 'ubuntu-latest'
- run: sudo apt-get install -y jq
-
- - name: Install jq (macOS)
- if: matrix.os == 'macos-latest'
- run: brew install jq || true
-
- - name: Run compatibility tests
- run: bash scripts/tests/test-compatibility.sh
-
- - name: Summary
- if: success()
- run: |
- echo "## ✅ Compatibility Tests Passed (${{ matrix.os }})" >> $GITHUB_STEP_SUMMARY
- echo "Platform compatibility validated" >> $GITHUB_STEP_SUMMARY
- profile-smoke-test:
- name: Profile Installation Smoke Test
- runs-on: ubuntu-latest
- needs: [non-interactive-tests]
- strategy:
- matrix:
- profile: [essential, developer, business, full]
-
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
-
- - name: Install dependencies
- run: sudo apt-get install -y jq curl
-
- - name: Test ${{ matrix.profile }} profile
- env:
- OPENCODE_BRANCH: ${{ github.head_ref || github.ref_name }}
- run: |
- TEST_DIR="/tmp/profile-test-${{ matrix.profile }}"
- mkdir -p "$TEST_DIR"
-
- echo "Installing ${{ matrix.profile }} profile..."
- bash install.sh ${{ matrix.profile }} --install-dir="$TEST_DIR/.opencode"
-
- if [ -d "$TEST_DIR/.opencode/agent" ]; then
- echo "✅ Profile ${{ matrix.profile }} installed successfully"
- echo "Files installed:"
- find "$TEST_DIR/.opencode" -type f -name "*.md" | head -10
- else
- echo "❌ Profile ${{ matrix.profile }} failed"
- exit 1
- fi
-
- - name: Summary
- if: success()
- run: |
- echo "## ✅ Profile Test: ${{ matrix.profile }}" >> $GITHUB_STEP_SUMMARY
- echo "Profile installed successfully via non-interactive mode" >> $GITHUB_STEP_SUMMARY
- summary:
- name: Installer Checks Summary
- runs-on: ubuntu-latest
- needs: [shellcheck, syntax-check, non-interactive-tests, e2e-tests, compatibility-tests, profile-smoke-test]
- if: always()
-
- steps:
- - name: Generate summary
- run: |
- echo "## 📊 Installer Checks Summary" >> $GITHUB_STEP_SUMMARY
- echo "" >> $GITHUB_STEP_SUMMARY
-
- if [ "${{ needs.shellcheck.result }}" == "success" ]; then
- echo "✅ **ShellCheck:** Passed" >> $GITHUB_STEP_SUMMARY
- else
- echo "❌ **ShellCheck:** Failed" >> $GITHUB_STEP_SUMMARY
- fi
-
- if [ "${{ needs.syntax-check.result }}" == "success" ]; then
- echo "✅ **Syntax Check:** Passed" >> $GITHUB_STEP_SUMMARY
- else
- echo "❌ **Syntax Check:** Failed" >> $GITHUB_STEP_SUMMARY
- fi
-
- if [ "${{ needs.non-interactive-tests.result }}" == "success" ]; then
- echo "✅ **Non-Interactive Tests:** Passed (Ubuntu & macOS)" >> $GITHUB_STEP_SUMMARY
- else
- echo "❌ **Non-Interactive Tests:** Failed" >> $GITHUB_STEP_SUMMARY
- fi
-
- if [ "${{ needs.e2e-tests.result }}" == "success" ]; then
- echo "✅ **E2E Tests:** Passed (Ubuntu & macOS)" >> $GITHUB_STEP_SUMMARY
- else
- echo "❌ **E2E Tests:** Failed" >> $GITHUB_STEP_SUMMARY
- fi
-
- if [ "${{ needs.compatibility-tests.result }}" == "success" ]; then
- echo "✅ **Compatibility Tests:** Passed (Ubuntu & macOS)" >> $GITHUB_STEP_SUMMARY
- else
- echo "❌ **Compatibility Tests:** Failed" >> $GITHUB_STEP_SUMMARY
- fi
-
- if [ "${{ needs.profile-smoke-test.result }}" == "success" ]; then
- echo "✅ **Profile Smoke Tests:** All profiles work" >> $GITHUB_STEP_SUMMARY
- else
- echo "❌ **Profile Smoke Tests:** Some profiles failed" >> $GITHUB_STEP_SUMMARY
- fi
-
- echo "" >> $GITHUB_STEP_SUMMARY
-
- FAILED=0
- [ "${{ needs.shellcheck.result }}" != "success" ] && FAILED=1
- [ "${{ needs.syntax-check.result }}" != "success" ] && FAILED=1
- [ "${{ needs.non-interactive-tests.result }}" != "success" ] && FAILED=1
- [ "${{ needs.e2e-tests.result }}" != "success" ] && FAILED=1
-
- if [ $FAILED -eq 0 ]; then
- echo "### ✅ All Installer Checks Passed!" >> $GITHUB_STEP_SUMMARY
- echo "The installer is safe to merge." >> $GITHUB_STEP_SUMMARY
- else
- echo "### ❌ Some Checks Failed" >> $GITHUB_STEP_SUMMARY
- echo "Please fix failing checks before merging." >> $GITHUB_STEP_SUMMARY
- fi
|