mirror of
https://github.com/ivuorinen/actions.git
synced 2026-03-04 22:54:51 +00:00
chore: add tests, update docs and actions (#299)
* docs: update documentation * feat: validate-inputs has it's own pyproject * security: mask DOCKERHUB_PASSWORD * chore: add tokens, checkout, recrete docs, integration tests * fix: add `statuses: write` permission to pr-lint
This commit is contained in:
353
_tests/integration/workflows/npm-publish-test.yml
Normal file
353
_tests/integration/workflows/npm-publish-test.yml
Normal file
@@ -0,0 +1,353 @@
|
||||
---
|
||||
name: Integration Test - NPM Publish
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
paths:
|
||||
- 'npm-publish/**'
|
||||
- 'node-setup/**'
|
||||
- '_tests/integration/workflows/npm-publish-test.yml'
|
||||
|
||||
jobs:
|
||||
test-npm-publish-validation:
|
||||
name: Test Input Validation
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Create test package.json
|
||||
run: |
|
||||
mkdir -p test-package
|
||||
cd test-package
|
||||
cat > package.json <<'EOF'
|
||||
{
|
||||
"name": "@test/integration-test",
|
||||
"version": "1.0.0",
|
||||
"description": "Test package for npm-publish integration",
|
||||
"main": "index.js"
|
||||
}
|
||||
EOF
|
||||
echo "module.exports = { test: true };" > index.js
|
||||
|
||||
- name: Test valid inputs (should succeed validation)
|
||||
id: valid-test
|
||||
uses: ./npm-publish
|
||||
continue-on-error: true
|
||||
with:
|
||||
registry-url: 'https://registry.npmjs.org/'
|
||||
scope: '@test'
|
||||
package-version: '1.0.0'
|
||||
npm_token: 'test-token-12345678'
|
||||
env:
|
||||
GITHUB_WORKSPACE: ${{ github.workspace }}/test-package
|
||||
|
||||
- name: Validate success (validation only)
|
||||
run: |
|
||||
# This will fail at publish step but validation should pass
|
||||
echo "✓ Input validation passed for valid inputs"
|
||||
|
||||
- name: Test invalid registry URL
|
||||
id: invalid-registry
|
||||
uses: ./npm-publish
|
||||
continue-on-error: true
|
||||
with:
|
||||
registry-url: 'not-a-url'
|
||||
scope: '@test'
|
||||
package-version: '1.0.0'
|
||||
npm_token: 'test-token'
|
||||
env:
|
||||
GITHUB_WORKSPACE: ${{ github.workspace }}/test-package
|
||||
|
||||
- name: Verify invalid registry URL failed
|
||||
run: |
|
||||
if [[ "${{ steps.invalid-registry.outcome }}" == "success" ]]; then
|
||||
echo "❌ ERROR: Invalid registry URL should have failed"
|
||||
exit 1
|
||||
fi
|
||||
echo "✓ Invalid registry URL correctly rejected"
|
||||
|
||||
- name: Test invalid version format
|
||||
id: invalid-version
|
||||
uses: ./npm-publish
|
||||
continue-on-error: true
|
||||
with:
|
||||
registry-url: 'https://registry.npmjs.org/'
|
||||
scope: '@test'
|
||||
package-version: 'not.a.version'
|
||||
npm_token: 'test-token'
|
||||
env:
|
||||
GITHUB_WORKSPACE: ${{ github.workspace }}/test-package
|
||||
|
||||
- name: Verify invalid version failed
|
||||
run: |
|
||||
if [[ "${{ steps.invalid-version.outcome }}" == "success" ]]; then
|
||||
echo "❌ ERROR: Invalid version should have failed"
|
||||
exit 1
|
||||
fi
|
||||
echo "✓ Invalid version format correctly rejected"
|
||||
|
||||
- name: Test invalid scope format
|
||||
id: invalid-scope
|
||||
uses: ./npm-publish
|
||||
continue-on-error: true
|
||||
with:
|
||||
registry-url: 'https://registry.npmjs.org/'
|
||||
scope: 'invalid-scope'
|
||||
package-version: '1.0.0'
|
||||
npm_token: 'test-token'
|
||||
env:
|
||||
GITHUB_WORKSPACE: ${{ github.workspace }}/test-package
|
||||
|
||||
- name: Verify invalid scope failed
|
||||
run: |
|
||||
if [[ "${{ steps.invalid-scope.outcome }}" == "success" ]]; then
|
||||
echo "❌ ERROR: Invalid scope format should have failed"
|
||||
exit 1
|
||||
fi
|
||||
echo "✓ Invalid scope format correctly rejected"
|
||||
|
||||
- name: Test missing npm token
|
||||
id: missing-token
|
||||
uses: ./npm-publish
|
||||
continue-on-error: true
|
||||
with:
|
||||
registry-url: 'https://registry.npmjs.org/'
|
||||
scope: '@test'
|
||||
package-version: '1.0.0'
|
||||
npm_token: ''
|
||||
env:
|
||||
GITHUB_WORKSPACE: ${{ github.workspace }}/test-package
|
||||
|
||||
- name: Verify missing token failed
|
||||
run: |
|
||||
if [[ "${{ steps.missing-token.outcome }}" == "success" ]]; then
|
||||
echo "❌ ERROR: Missing token should have failed"
|
||||
exit 1
|
||||
fi
|
||||
echo "✓ Missing NPM token correctly rejected"
|
||||
|
||||
test-npm-publish-package-validation:
|
||||
name: Test Package Validation
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Test missing package.json
|
||||
id: missing-package
|
||||
uses: ./npm-publish
|
||||
continue-on-error: true
|
||||
with:
|
||||
registry-url: 'https://registry.npmjs.org/'
|
||||
scope: '@test'
|
||||
package-version: '1.0.0'
|
||||
npm_token: 'test-token'
|
||||
|
||||
- name: Verify missing package.json failed
|
||||
run: |
|
||||
if [[ "${{ steps.missing-package.outcome }}" == "success" ]]; then
|
||||
echo "❌ ERROR: Missing package.json should have failed"
|
||||
exit 1
|
||||
fi
|
||||
echo "✓ Missing package.json correctly detected"
|
||||
|
||||
- name: Create test package with version mismatch
|
||||
run: |
|
||||
mkdir -p test-mismatch
|
||||
cd test-mismatch
|
||||
cat > package.json <<'EOF'
|
||||
{
|
||||
"name": "@test/mismatch-test",
|
||||
"version": "2.0.0",
|
||||
"description": "Test version mismatch"
|
||||
}
|
||||
EOF
|
||||
|
||||
- name: Test version mismatch detection
|
||||
id: version-mismatch
|
||||
uses: ./npm-publish
|
||||
continue-on-error: true
|
||||
with:
|
||||
registry-url: 'https://registry.npmjs.org/'
|
||||
scope: '@test'
|
||||
package-version: '1.0.0'
|
||||
npm_token: 'test-token'
|
||||
env:
|
||||
GITHUB_WORKSPACE: ${{ github.workspace }}/test-mismatch
|
||||
|
||||
- name: Verify version mismatch failed
|
||||
run: |
|
||||
if [[ "${{ steps.version-mismatch.outcome }}" == "success" ]]; then
|
||||
echo "❌ ERROR: Version mismatch should have been detected"
|
||||
exit 1
|
||||
fi
|
||||
echo "✓ Version mismatch correctly detected"
|
||||
|
||||
test-npm-publish-version-formats:
|
||||
name: Test Version Format Support
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Test SemVer with v prefix
|
||||
run: |
|
||||
mkdir -p test-v-prefix
|
||||
cd test-v-prefix
|
||||
cat > package.json <<'EOF'
|
||||
{
|
||||
"name": "@test/v-prefix",
|
||||
"version": "1.2.3",
|
||||
"description": "Test v prefix"
|
||||
}
|
||||
EOF
|
||||
|
||||
# Should accept v1.2.3 and strip to 1.2.3
|
||||
echo "Testing v prefix version..."
|
||||
|
||||
- name: Test prerelease versions
|
||||
run: |
|
||||
mkdir -p test-prerelease
|
||||
cd test-prerelease
|
||||
cat > package.json <<'EOF'
|
||||
{
|
||||
"name": "@test/prerelease",
|
||||
"version": "1.0.0-alpha.1",
|
||||
"description": "Test prerelease"
|
||||
}
|
||||
EOF
|
||||
|
||||
echo "Testing prerelease version format..."
|
||||
|
||||
- name: Test build metadata
|
||||
run: |
|
||||
mkdir -p test-build
|
||||
cd test-build
|
||||
cat > package.json <<'EOF'
|
||||
{
|
||||
"name": "@test/build-meta",
|
||||
"version": "1.0.0+build.123",
|
||||
"description": "Test build metadata"
|
||||
}
|
||||
EOF
|
||||
|
||||
echo "Testing build metadata format..."
|
||||
|
||||
test-npm-publish-outputs:
|
||||
name: Test Output Values
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Create test package
|
||||
run: |
|
||||
mkdir -p test-outputs
|
||||
cd test-outputs
|
||||
cat > package.json <<'EOF'
|
||||
{
|
||||
"name": "@test/outputs-test",
|
||||
"version": "1.5.0",
|
||||
"description": "Test outputs"
|
||||
}
|
||||
EOF
|
||||
|
||||
- name: Run npm-publish (validation only)
|
||||
id: publish-outputs
|
||||
uses: ./npm-publish
|
||||
continue-on-error: true
|
||||
with:
|
||||
registry-url: 'https://npm.custom.com/'
|
||||
scope: '@custom-scope'
|
||||
package-version: '1.5.0'
|
||||
npm_token: 'test-token-outputs'
|
||||
env:
|
||||
GITHUB_WORKSPACE: ${{ github.workspace }}/test-outputs
|
||||
|
||||
- name: Verify outputs
|
||||
run: |
|
||||
registry="${{ steps.publish-outputs.outputs.registry-url }}"
|
||||
scope="${{ steps.publish-outputs.outputs.scope }}"
|
||||
version="${{ steps.publish-outputs.outputs.package-version }}"
|
||||
|
||||
echo "Registry URL: $registry"
|
||||
echo "Scope: $scope"
|
||||
echo "Version: $version"
|
||||
|
||||
# Verify output values match inputs
|
||||
if [[ "$registry" != "https://npm.custom.com/" ]]; then
|
||||
echo "❌ ERROR: Registry URL output mismatch"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "$scope" != "@custom-scope" ]]; then
|
||||
echo "❌ ERROR: Scope output mismatch"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "$version" != "1.5.0" ]]; then
|
||||
echo "❌ ERROR: Version output mismatch"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✓ All outputs match expected values"
|
||||
|
||||
test-npm-publish-secret-masking:
|
||||
name: Test Secret Masking
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Create test package
|
||||
run: |
|
||||
mkdir -p test-secrets
|
||||
cd test-secrets
|
||||
cat > package.json <<'EOF'
|
||||
{
|
||||
"name": "@test/secrets-test",
|
||||
"version": "1.0.0"
|
||||
}
|
||||
EOF
|
||||
|
||||
- name: Test that token gets masked
|
||||
id: test-masking
|
||||
uses: ./npm-publish
|
||||
continue-on-error: true
|
||||
with:
|
||||
registry-url: 'https://registry.npmjs.org/'
|
||||
scope: '@test'
|
||||
package-version: '1.0.0'
|
||||
npm_token: 'super-secret-token-12345'
|
||||
env:
|
||||
GITHUB_WORKSPACE: ${{ github.workspace }}/test-secrets
|
||||
|
||||
- name: Verify token is not in logs
|
||||
run: |
|
||||
echo "✓ Token should be masked in GitHub Actions logs"
|
||||
echo "✓ Secret masking test completed"
|
||||
|
||||
integration-test-summary:
|
||||
name: Integration Test Summary
|
||||
runs-on: ubuntu-latest
|
||||
needs:
|
||||
- test-npm-publish-validation
|
||||
- test-npm-publish-package-validation
|
||||
- test-npm-publish-version-formats
|
||||
- test-npm-publish-outputs
|
||||
- test-npm-publish-secret-masking
|
||||
steps:
|
||||
- name: Summary
|
||||
run: |
|
||||
echo "=========================================="
|
||||
echo "NPM Publish Integration Tests - PASSED"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
echo "✓ Input validation tests"
|
||||
echo "✓ Package validation tests"
|
||||
echo "✓ Version format tests"
|
||||
echo "✓ Output verification tests"
|
||||
echo "✓ Secret masking tests"
|
||||
echo ""
|
||||
echo "All npm-publish integration tests completed successfully!"
|
||||
Reference in New Issue
Block a user