name: Test Module Installation Action on: pull_request: branches: [ main ] workflow_dispatch: jobs: # Test basic single module installation test-single-module: name: Single Module (No Dependencies) runs-on: ubuntu-latest steps: - name: Checkout action-module-install uses: actions/checkout@v6.0.2 with: path: action-module-install - name: Checkout action-server-install uses: actions/checkout@v6.0.2 with: repository: Nodarx/action-server-install ref: main path: action-server-install github-server-url: https://git.ktrix.dev - name: Setup server environment uses: ./action-server-install with: install-php: 'true' install-node: 'true' php-version: '8.5' node-version: '24' server-path: './server' - name: Create test module repository run: | mkdir -p /tmp/test-repos/simple-module cd /tmp/test-repos/simple-module git init git config user.email "test@example.com" git config user.name "Test User" # Create a simple Node.js module cat > package.json << 'EOF' { "name": "simple-module", "version": "1.0.0", "description": "Test module", "main": "index.js" } EOF echo "console.log('Simple module loaded');" > index.js git add . git commit -m "Initial commit" - name: Install single module id: install uses: ./action-module-install with: modules: | [ { "name": "simple-module", "repo": "file:///tmp/test-repos/simple-module" } ] - name: Verify installation run: | echo "Checking installation..." # Check module directory exists if [ ! -d "./modules/simple-module" ]; then echo "::error::Module directory not found" exit 1 fi # Check files were cloned if [ ! -f "./modules/simple-module/package.json" ]; then echo "::error::package.json not found" exit 1 fi # Check npm install result (node_modules required only if production deps exist) DEP_COUNT=$(node -e 'const p=require("./modules/simple-module/package.json"); const c=Object.keys(p.dependencies||{}).length+Object.keys(p.optionalDependencies||{}).length; console.log(c);') if [ "$DEP_COUNT" -gt 0 ] && [ ! -d "./modules/simple-module/node_modules" ]; then echo "::error::node_modules not found for module with production dependencies" exit 1 fi # Check outputs if [ "${{ steps.install.outputs.status }}" != "success" ]; then echo "::error::Installation status is not success" exit 1 fi if [ "${{ steps.install.outputs.installed-modules }}" != "simple-module" ]; then echo "::error::Installed modules output is incorrect" exit 1 fi echo "✓ Single module installation verified" # Test PHP module test-php-module: name: PHP Module with Composer runs-on: ubuntu-latest steps: - name: Checkout action-module-install uses: actions/checkout@v6.0.2 with: path: action-module-install - name: Checkout action-server-install uses: actions/checkout@v6.0.2 with: repository: Nodarx/action-server-install ref: main path: action-server-install github-server-url: https://git.ktrix.dev - name: Setup PHP environment uses: ./action-server-install with: install-php: 'true' php-version: '8.5' server-path: './server' - name: Create PHP test module run: | mkdir -p /tmp/test-repos/php-module cd /tmp/test-repos/php-module git init git config user.email "test@example.com" git config user.name "Test User" cat > composer.json << 'EOF' { "name": "test/php-module", "description": "PHP test module", "require": { "php": ">=8.0" }, "autoload": { "psr-4": { "Test\\PhpModule\\": "src/" } } } EOF mkdir -p src cat > src/TestClass.php << 'EOF' package.json << 'EOF' { "name": "vue-module", "version": "1.0.0", "description": "Vue test module", "main": "index.js", "dependencies": {} } EOF cat > index.js << 'EOF' export default { name: 'VueModule', getMessage() { return 'Vue module loaded'; } }; EOF git add . && git commit -m "Initial commit" - name: Install Node.js module uses: ./action-module-install with: modules: | [ { "name": "vue-module", "repo": "file:///tmp/test-repos/vue-module" } ] - name: Verify Node.js installation run: | # Check package.json exists if [ ! -f "./modules/vue-module/package.json" ]; then echo "::error::package.json not found" exit 1 fi # Check npm install result (node_modules required only if production deps exist) DEP_COUNT=$(node -e 'const p=require("./modules/vue-module/package.json"); const c=Object.keys(p.dependencies||{}).length+Object.keys(p.optionalDependencies||{}).length; console.log(c);') if [ "$DEP_COUNT" -gt 0 ] && [ ! -d "./modules/vue-module/node_modules" ]; then echo "::error::node_modules directory not found for module with production dependencies" exit 1 fi echo "✓ Node.js module installation verified" # Test mixed PHP and Node.js modules test-mixed-modules: name: Mixed PHP and Node Modules runs-on: ubuntu-latest steps: - name: Checkout action-module-install uses: actions/checkout@v6.0.2 with: path: action-module-install - name: Checkout action-server-install uses: actions/checkout@v6.0.2 with: repository: Nodarx/action-server-install ref: main path: action-server-install github-server-url: https://git.ktrix.dev - name: Setup both PHP and Node.js uses: ./action-server-install with: install-php: 'true' install-node: 'true' php-version: '8.5' node-version: '24' server-path: './server' - name: Create mixed test modules run: | # PHP backend module mkdir -p /tmp/test-repos/backend cd /tmp/test-repos/backend git init git config user.email "test@example.com" git config user.name "Test User" cat > composer.json << 'EOF' { "name": "test/backend", "require": {} } EOF git add . && git commit -m "Initial commit" # Node.js frontend module mkdir -p /tmp/test-repos/frontend cd /tmp/test-repos/frontend git init git config user.email "test@example.com" git config user.name "Test User" cat > package.json << 'EOF' { "name": "frontend", "version": "1.0.0" } EOF git add . && git commit -m "Initial commit" - name: Install mixed modules uses: ./action-module-install with: modules: | [ { "name": "backend", "repo": "file:///tmp/test-repos/backend" }, { "name": "frontend", "repo": "file:///tmp/test-repos/frontend" } ] - name: Verify mixed installation run: | # Verify PHP module if [ ! -d "./modules/backend/vendor" ]; then echo "::error::Backend composer dependencies not installed" exit 1 fi # Verify Node module (node_modules required only if production deps exist) DEP_COUNT=$(node -e 'const p=require("./modules/frontend/package.json"); const c=Object.keys(p.dependencies||{}).length+Object.keys(p.optionalDependencies||{}).length; console.log(c);') if [ "$DEP_COUNT" -gt 0 ] && [ ! -d "./modules/frontend/node_modules" ]; then echo "::error::Frontend module has production dependencies but node_modules is missing" exit 1 fi echo "✓ Mixed PHP and Node.js modules verified" # Test summary test-summary: name: Test Summary runs-on: ubuntu-latest needs: - test-single-module - test-php-module - test-node-module - test-mixed-modules if: always() steps: - name: Check test results run: | echo "## Test Results Summary" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "| Test | Result |" >> $GITHUB_STEP_SUMMARY echo "|------|--------|" >> $GITHUB_STEP_SUMMARY echo "| Single Module | ${{ needs.test-single-module.result }} |" >> $GITHUB_STEP_SUMMARY echo "| PHP Module | ${{ needs.test-php-module.result }} |" >> $GITHUB_STEP_SUMMARY echo "| Node Module | ${{ needs.test-node-module.result }} |" >> $GITHUB_STEP_SUMMARY echo "| Mixed Modules | ${{ needs.test-mixed-modules.result }} |" >> $GITHUB_STEP_SUMMARY # Check if any test failed if [ "${{ needs.test-single-module.result }}" != "success" ] || \ [ "${{ needs.test-php-module.result }}" != "success" ] || \ [ "${{ needs.test-node-module.result }}" != "success" ] || \ [ "${{ needs.test-mixed-modules.result }}" != "success" ]; then echo "" >> $GITHUB_STEP_SUMMARY echo "❌ One or more tests failed" >> $GITHUB_STEP_SUMMARY exit 1 fi echo "" >> $GITHUB_STEP_SUMMARY echo "✅ All tests passed!" >> $GITHUB_STEP_SUMMARY