Skip to content

chore: update Node.js version requirement to v16 #32

chore: update Node.js version requirement to v16

chore: update Node.js version requirement to v16 #32

name: Deploy PR Preview
on:
pull_request:
types: [opened, synchronize, reopened]
branches: ['main']
permissions:
contents: read # Read repository contents
pages: write # Deploy to GitHub Pages
id-token: write # Use OIDC tokens
pull-requests: write # Comment on PRs
deployments: write # Manage deployments
statuses: write # Update commit statuses
actions: write # Manage artifacts and workflow runs
checks: write # Update check runs and E2E test results
issues: write # Update issues (if needed for notifications)
discussions: write # Update discussions (if needed for notifications)
security-events: read # Read security events for E2E tests
concurrency:
group: "preview-${{ github.event.pull_request.number }}"
cancel-in-progress: true
jobs:
quality:
name: Code Quality
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 18
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Lint
run: npm run lint
continue-on-error: true
- name: Run tests
run: npm test
continue-on-error: true
deploy-preview:
needs: quality
runs-on: ubuntu-latest
environment:
name: preview
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 18
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Build
run: npm run build
env:
VITE_APP_ENV: preview
GITHUB_PAGES: true
BASE_URL: /copy-trading/
- name: Setup Pages
uses: actions/configure-pages@v4
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: './dist'
name: 'preview-pages'
retention-days: 1
- name: Deploy Preview
id: deployment
uses: actions/deploy-pages@v3
with:
artifact_name: preview-pages
preview: true
- name: Comment PR
if: success()
uses: actions/github-script@v7
with:
script: |
const url = `${{ steps.deployment.outputs.page_url }}`;
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `🚀 Preview deployed to: ${url}`
});
- name: Check required secrets
run: |
if [ -z "${{ secrets.AUTOMAGICALLY_TOKEN }}" ]; then
echo "::error::Missing required secret: AUTOMAGICALLY_TOKEN"
exit 1
fi
if [ -z "${{ secrets.AUTOMAGICALLY_TEST_TARGET_ID }}" ]; then
echo "::error::Missing required secret: AUTOMAGICALLY_TEST_TARGET_ID"
exit 1
fi
- name: Run E2E tests
id: e2e
uses: OctoMind-dev/automagically-action-execute@v2
continue-on-error: true
with:
url: ${{ steps.deployment.outputs.page_url }}
token: ${{ secrets.AUTOMAGICALLY_TOKEN }}
testTargetId: ${{ secrets.AUTOMAGICALLY_TEST_TARGET_ID }}
blocking: true
- name: Report Workflow Status
if: always()
uses: actions/github-script@v7
with:
script: |
const { owner, repo } = context.repo;
const run_id = context.runId;
const run_url = `https://github.com/${owner}/${repo}/actions/runs/${run_id}`;
const status = '${{ steps.e2e.conclusion || steps.e2e.outcome || '' }}' === 'failure'
? '❌ E2E tests failed'
: '✅ All checks completed';
const body = `### Workflow Status\n${status}\n\nFor detailed test results, check the OctoMind report in the PR.\n\n🔍 [View Workflow Details](${run_url})`;
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: owner,
repo: repo,
body: body
});