Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
88024c4
Add Playwright tests
mraible Jul 7, 2025
3517f71
Fix directory config for create-envfile action
mraible Jul 8, 2025
90053b2
Fix placement of directory key
mraible Jul 8, 2025
03b7977
Remove comment
mraible Jul 8, 2025
5f7f999
Only install Chrome
mraible Jul 8, 2025
eec18de
Fix path of playwright-report directory to upload
mraible Jul 8, 2025
505a699
Add 5 min timeout for deployment
mraible Jul 8, 2025
e6c3706
Install app using Playwright
mraible Jul 8, 2025
f56cdbe
Fix config
mraible Jul 8, 2025
53370de
Polishing
mraible Jul 8, 2025
f60b88b
Try different app name syntax
mraible Jul 8, 2025
2414837
Change from dotenv to dotenvx
mraible Jul 17, 2025
c693484
Merge branch 'main' into playwright-tests
mraible Aug 15, 2025
1cb20c7
All workflow to be manually triggered
mraible Aug 15, 2025
4b6dc7b
Refactor Playwright tests to follow best practices
mraible Aug 18, 2025
7bf790a
Fix test navigation flow between App Manager and installation
mraible Aug 18, 2025
77a2126
Fix CI: Add retry logic for app visibility in catalog
mraible Aug 18, 2025
33ded18
Simplify test flow: Skip App Manager navigation
mraible Aug 18, 2025
0a003a2
Fix app installation detection and retry logic
mraible Aug 18, 2025
acd9f38
Fix app verification by checking installation status on current page
mraible Aug 18, 2025
08ac434
Add comprehensive fallback verification for app installation
mraible Aug 18, 2025
fdec364
Make tests CI-aware: Handle pre-installed apps from Foundry CLI
mraible Aug 18, 2025
08e93e7
Add helpful error messages for missing apps in local environment
mraible Aug 18, 2025
0754ac1
Fix navigation trigger selector with multiple fallback strategies
mraible Aug 18, 2025
0cd4cf1
Fix navigation selectors using Playwright MCP browser inspection
mraible Aug 18, 2025
30a39f5
Add debugging and page navigation handling
mraible Aug 18, 2025
9ac7953
Fix navigation timing and eliminate duplicate logging
mraible Aug 18, 2025
cea6462
Remove generated IDs from manifest.yml to match main branch
mraible Aug 18, 2025
c699e7f
Transform tests to professional-grade architecture
mraible Aug 18, 2025
8b02310
Remove trailing slash from base URL
mraible Aug 18, 2025
944798d
Clean up unnecessary 'enterprise-grade' labels from comments
mraible Aug 18, 2025
a4d44fe
Update Node.js requirement to LTS version 22+
mraible Aug 18, 2025
a1de21b
Implement Playwright best practices for enhanced E2E testing
mraible Aug 18, 2025
3f2bdc7
Improvements from review
mraible Aug 20, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 68 additions & 8 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
name: Quickstart CI

on:
workflow_dispatch:
push:
branches: [ main ]
pull_request:
branches: [ main ]

jobs:
deploy-and-release:
e2e:
runs-on: ubuntu-latest
env:
FOUNDRY_API_CLIENT_ID: ${{ secrets.FOUNDRY_API_CLIENT_ID }}
Expand Down Expand Up @@ -36,21 +37,80 @@ jobs:
# Generate unique app name
yq -i '.name = .name + "-${{ github.actor }}-" + "'$(date +"%Y%m%d%H%M")'"' manifest.yml

echo "Prepared manifest with app name: $(yq '.name' manifest.yml)"
# Set app name as environment variable
APP_NAME=$(yq '.name' manifest.yml)
echo "APP_NAME=$APP_NAME" >> $GITHUB_ENV

echo "Prepared manifest with app name: $APP_NAME"

- name: Deploy app to Falcon
run: foundry apps deploy --change-type=major --change-log="e2e deploy"
run: |
foundry apps deploy --change-type=major --change-log="e2e deploy"
echo "App deployment initiated"

- name: Release app to Falcon
- name: Wait for deployment and release app
run: |
until foundry apps list-deployments | grep -i "successful"; do
sleep 1
echo "Waiting for deployment to complete..."
timeout=300 # 5 minute timeout
elapsed=0

while [ $elapsed -lt $timeout ]; do
if foundry apps list-deployments | grep -i "successful"; then
echo "Deployment successful, releasing app..."
foundry apps release --change-type=major --notes="e2e release"
echo "App released successfully"
exit 0
fi

if foundry apps list-deployments | grep -i "failed"; then
echo "Deployment failed"
exit 1
fi

sleep 5
elapsed=$((elapsed + 5))
done
echo "Releasing app..."
foundry apps release --change-type=major --notes="e2e release"

echo "Deployment timeout after ${timeout} seconds"
exit 1

- name: Install Node LTS
uses: actions/setup-node@v4
with:
node-version: lts/*

- name: Install Playwright dependencies
run: npm ci
working-directory: e2e

- name: Install Playwright browsers
run: npx playwright install chromium --with-deps
working-directory: e2e

- name: Make envfile
uses: SpicyPizza/create-envfile@v2
with:
envkey_FALCON_USERNAME: ${{ secrets.FALCON_USERNAME }}
envkey_FALCON_PASSWORD: ${{ secrets.FALCON_PASSWORD }}
envkey_FALCON_AUTH_SECRET: ${{ secrets.FALCON_AUTH_SECRET }}
envkey_APP_NAME: $APP_NAME
directory: e2e

- name: Run Playwright tests
run: npx dotenvx run -- npx playwright test
working-directory: e2e

- name: Upload Playwright report
uses: actions/upload-artifact@v4
if: ${{ !cancelled() }}
with:
name: playwright-report-${{ env.APP_NAME }}
path: e2e/playwright-report/
retention-days: 30

- name: Delete app from Falcon
if: always()
run: |
echo "Deleting app: $APP_NAME"
foundry apps delete -f
echo "App deleted successfully"
5 changes: 5 additions & 0 deletions e2e/.env.sample
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
FALCON_USERNAME=
FALCON_PASSWORD=
FALCON_AUTH_SECRET=
FALCON_BASE_URL=https://falcon.us-2.crowdstrike.com
APP_NAME=foundry-quickstart
14 changes: 14 additions & 0 deletions e2e/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# .dotenvx
.env
.env.keys

# IntelliJ IDEA
.idea

# Playwright
node_modules/
/test-results/
/playwright/
/playwright-report/
/blob-report/
/playwright/.cache/
1 change: 1 addition & 0 deletions e2e/constants/AuthFile.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const AuthFile = 'playwright/.auth/user.json';
Loading
Loading