feat: add Octomind integration to GitHub Actions workflows #4
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Deploy PR Preview | ||
on: | ||
pull_request: | ||
types: [opened, synchronize, reopened] | ||
branches: ['main'] | ||
permissions: | ||
contents: read | ||
pages: write | ||
id-token: write | ||
pull-requests: write | ||
security-events: write | ||
# Cancel in-progress runs for PRs | ||
concurrency: | ||
group: ${{ github.workflow }}-${{ github.ref }} | ||
cancel-in-progress: true | ||
jobs: | ||
quality: | ||
name: Code Quality | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v3 | ||
with: | ||
fetch-depth: 0 # Fetch all history for all branches and tags | ||
- name: Setup Node.js | ||
uses: actions/setup-node@v3 | ||
with: | ||
node-version: 18 | ||
cache: 'npm' | ||
- name: Install dependencies | ||
run: | | ||
npm ci | ||
# Cache the node_modules directory | ||
id: npm-cache | ||
env: | ||
cache-name: cache-node-modules | ||
with: | ||
path: node_modules | ||
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} | ||
restore-keys: | | ||
${{ runner.os }}-build-${{ env.cache-name }}- | ||
${{ runner.os }}-build- | ||
${{ runner.os }}- | ||
- name: Lint | ||
run: npm run lint | ||
continue-on-error: true | ||
- name: Type check | ||
run: | | ||
npm run typecheck || echo "Type check failed but continuing" | ||
continue-on-error: true | ||
- name: Run unit tests | ||
run: npm test | ||
preview_and_test: | ||
name: Preview Deploy & E2E | ||
needs: quality | ||
runs-on: ubuntu-latest | ||
environment: | ||
name: pr-preview | ||
url: ${{ steps.deployment.outputs.page_url }} | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v3 | ||
- name: Setup Node.js | ||
uses: actions/setup-node@v3 | ||
with: | ||
node-version: 18 | ||
cache: 'npm' | ||
- name: Install dependencies | ||
run: npm ci | ||
- name: Build | ||
run: npm run build | ||
env: | ||
VITE_APP_ENV: preview | ||
- name: Cache build output | ||
uses: actions/cache@v3 | ||
with: | ||
path: dist | ||
key: ${{ runner.os }}-build-${{ github.sha }} | ||
- name: Setup Pages | ||
uses: actions/configure-pages@v3 | ||
- name: Upload artifact | ||
uses: actions/upload-pages-artifact@v2 | ||
with: | ||
path: './dist' | ||
- name: Deploy PR Preview | ||
id: deployment | ||
uses: actions/deploy-pages@v2 | ||
with: | ||
preview: true | ||
- name: Comment PR | ||
uses: actions/github-script@v6 | ||
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 URL: ${url}` | ||
}); | ||
- name: Run E2E tests | ||
id: e2e | ||
uses: OctoMind-dev/automagically-action-execute@v2 | ||
with: | ||
url: ${{ steps.deployment.outputs.page_url }} | ||
token: ${{ secrets.AUTOMAGICALLY_TOKEN }} | ||
testTargetId: ${{ secrets.AUTOMAGICALLY_TEST_TARGET_ID }} | ||
blocking: true | ||
- name: Report Status | ||
if: always() | ||
uses: actions/github-script@v6 | ||
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 = `${process.env.GITHUB_WORKFLOW} workflow ${context.job} job status: ${steps.e2e.outcome}`; | ||
const body = `### Workflow Status\n${status}\n[View Run Details](${run_url})`; | ||
github.rest.issues.createComment({ | ||
issue_number: context.issue.number, | ||
owner: owner, | ||
repo: repo, | ||
body: body | ||
}); |