ci: setup playwright #475
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: Build, Test, and Deploy | |
on: | |
pull_request: | |
types: | |
- opened | |
- synchronize | |
- reopened | |
push: | |
branches: | |
- master | |
jobs: | |
check-rebase: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # Ensure full history is fetched | |
- name: Add upstream remote | |
run: | | |
# Add the upstream repository (base repo) | |
echo "Adding upstream remote..." | |
git remote add upstream https://github.com/siemens/ngx-datatable.git | |
git fetch upstream | |
echo "Upstream remote added and fetched." | |
- name: Fetch PR Branch from Fork | |
run: | | |
echo "Fetching PR branch from fork..." | |
git fetch origin pull/${{ github.event.pull_request.number }}/head:${{ github.head_ref }} | |
echo "Fetched PR branch: ${{ github.head_ref }}" | |
- name: Attach to PR Branch | |
run: | | |
echo "Checking out the PR branch: ${{ github.head_ref }}" | |
git checkout ${{ github.head_ref }} | |
echo "Checked out branch: ${{ github.head_ref }}" | |
- name: Fetch the latest upstream master (or main) branch | |
run: | | |
echo "Fetching latest master from upstream..." | |
git fetch upstream master # or main if that's your default branch | |
echo "Fetched latest master branch from upstream." | |
- name: Check if PR branch is rebased onto master | |
run: | | |
UPSTREAM=master # Use 'main' if your default branch is named 'main' | |
echo "Target upstream branch: $UPSTREAM" | |
# Get the current and merged commit hashes | |
CURRENT=$(git rev-parse HEAD) | |
MERGED=$(git merge-base HEAD upstream/$UPSTREAM) | |
echo "Current commit hash: $CURRENT" | |
echo "Merged commit hash: $MERGED" | |
# Check if the PR branch contains commits not part of master | |
# Use git log to check for commits in the PR branch that are not in upstream/master | |
PR_COMMITS=$(git log upstream/$UPSTREAM..HEAD --oneline) | |
if [ -n "$PR_COMMITS" ]; then | |
echo "This branch contains additional commits that are intended for merging into $UPSTREAM." | |
echo "Ignoring these commits as they are already part of the intended changes." | |
else | |
echo "Branch is up-to-date with $UPSTREAM." | |
fi | |
# Proceed with checking if the PR branch is based on the latest master | |
if [ "$MERGED" != "$CURRENT" ]; then | |
echo "This branch is not rebased with the latest $UPSTREAM." | |
echo "Run 'git rebase upstream/$UPSTREAM' locally to fix this." | |
exit 1 | |
else | |
echo "Branch is rebased and up-to-date with $UPSTREAM." | |
fi | |
build: | |
needs: check-rebase | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set Node Version | |
uses: actions/setup-node@v4 | |
with: | |
node-version: lts/iron | |
- name: Set the branch name | |
id: set_branch | |
run: | | |
BRANCH_NAME=${{ github.head_ref }} | |
echo "Branch name is: $BRANCH_NAME" | |
# Check for remote branch | |
REMOTE_BRANCH=$(git ls-remote --heads https://[email protected]/chintankavathia/ngx-datatable-snapshots.git $BRANCH_NAME) | |
echo "Remote branch lookup result: $REMOTE_BRANCH" | |
if [ -n "$REMOTE_BRANCH" ]; then | |
echo "Branch $BRANCH_NAME exists" | |
echo "branch=$BRANCH_NAME" >> $GITHUB_ENV | |
else | |
echo "Branch $BRANCH_NAME does not exist, defaulting to main" | |
echo "branch=main" >> $GITHUB_ENV | |
fi | |
- name: Clone Snapshot Repository | |
run: | | |
git clone https://[email protected]/chintankavathia/ngx-datatable-snapshots.git temp_snapshots | |
cd temp_snapshots | |
git checkout ${{ env.branch }} | |
env: | |
SNAPSHOT_REPO_TOKEN: ${{ secrets.SNAPSHOT_REPO_TOKEN }} | |
- name: Copy Snapshots to Playwright Folder | |
run: | | |
mkdir -p playwright/snapshots | |
cp -r temp_snapshots/snapshots/e2e playwright/snapshots/ | |
rm -rf temp_snapshots | |
- name: Install | |
uses: bahmutov/npm-install@v1 | |
- name: Build and package library | |
run: | | |
npm run package --if-present | |
env: | |
CI: true | |
- name: Format | |
run: | | |
npm run format:check --if-present | |
env: | |
CI: true | |
- name: Build | |
run: | | |
npm run build --if-present | |
env: | |
CI: true | |
- name: Test | |
run: | | |
npm run ci --if-present | |
env: | |
CI: true | |
- name: E2E Prepare | |
run: | | |
npm run e2e:prepare --if-present | |
env: | |
CI: true | |
- name: E2E | |
run: | | |
npm run vrt --if-present | |
env: | |
CI: true | |
- name: Build Docs | |
run: | | |
npm run build-docs --if-present | |
env: | |
CI: true | |
- name: Deploy Docs | |
uses: JamesIves/[email protected] | |
with: | |
branch: gh-pages | |
folder: dist/ngx-datatable | |
if: ${{ github.ref == 'refs/heads/master' }} |