test deployment #30
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: Demo Deployment | |
on: | |
push: | |
branches: | |
- main | |
- 'gcweb-pr*' | |
- demo-deploy | |
jobs: | |
build_and_deploy: | |
runs-on: ubuntu-latest | |
steps: | |
# Step 1: Checkout the repository and initialize submodules | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
with: | |
submodules: recursive # This initializes and updates submodules automatically | |
# Step 2: Set up Node.js and Bower | |
- name: Set up Node.js | |
uses: actions/setup-node@v3 | |
with: | |
node-version: '18' | |
- name: Install Bower | |
run: npm install -g bower | |
# Step 3: Install dependencies and build demo files | |
- name: Install dependencies | |
run: npm install --legacy-peer-deps | |
- name: Build Demo Files (GCWeb) | |
run: | | |
grunt demo --branch=${{ github.ref_name }} | |
docker compose up -d | |
- name: Build Demo Files (WET-BOEW) | |
run: grunt dist | |
# Step 4: Copy built files to the gh-pages directory | |
- name: Copy Built Files to gh-pages | |
run: | | |
# Ensure the gh-pages directory exists | |
mkdir -p ${{ github.workspace }}/gh-pages | |
# Copy the built files to gh-pages | |
if [ -d "./~sites" ]; then rsync -av ./~sites/ ${{ github.workspace }}/gh-pages/; fi | |
if [ -d "./dist" ]; then rsync -av ./dist/* ${{ github.workspace }}/gh-pages/; fi | |
# Step 4.5: Verify gh-pages Directory Contents | |
- name: Verify gh-pages Directory Contents | |
run: ls -R ${{ github.workspace }}/gh-pages | |
# Step 5: Clone or Ensure gh-pages Branch Exists and Update Submodule | |
- name: Dist - Update Submodule | |
run: | | |
# Define the gh-pages path | |
GHPAGES_PATH="${{ github.workspace }}/gh-pages" | |
# Check if the gh-pages directory exists and is a Git repository | |
if [ -d "$GHPAGES_PATH/.git" ]; then | |
echo "gh-pages directory already exists and is a Git repository; skipping clone." | |
cd "$GHPAGES_PATH" | |
git pull origin gh-pages --rebase || true # Sync with remote, ignore errors if rebase fails | |
else | |
# If the directory exists but is not a Git repo, clear it | |
if [ -d "$GHPAGES_PATH" ]; then | |
rm -rf "$GHPAGES_PATH/*" | |
else | |
mkdir -p "$GHPAGES_PATH" | |
fi | |
# Clone the gh-pages branch if it exists, or initialize it | |
if git ls-remote --exit-code --heads https://github.com/${{ github.repository_owner }}/GCWeb.git gh-pages; then | |
git clone --depth 1 https://github.com/${{ github.repository_owner }}/GCWeb.git --branch gh-pages "$GHPAGES_PATH" | |
else | |
# Initialize an empty gh-pages branch | |
git clone --depth 1 https://github.com/${{ github.repository_owner }}/GCWeb.git "$GHPAGES_PATH" | |
cd "$GHPAGES_PATH" | |
git checkout --orphan gh-pages | |
git rm -rf . | |
touch .nojekyll # To prevent GitHub Pages from processing files as Jekyll | |
git commit --allow-empty -m "Initialize gh-pages branch" | |
git push origin gh-pages | |
cd .. | |
fi | |
fi | |
# Move into the gh-pages directory and update the submodule | |
cd "$GHPAGES_PATH" | |
git submodule update --init --recursive | |
# Set Git user identity for commits | |
git config user.name "GitHub Actions" | |
git config user.email "[email protected]" | |
# If the submodule doesn’t exist, add it | |
if [ ! -d "GCWeb" ]; then | |
git submodule add -b master https://github.com/ServiceCanada/wet-boew-demos.git GCWeb | |
fi | |
# Fetch and reset submodule to the latest commit on the desired branch | |
cd GCWeb | |
git remote set-url origin https://github.com/ServiceCanada/wet-boew-demos.git | |
git fetch --depth 1 origin | |
# Try to reset to 'master' or fallback to 'gh-pages' | |
if git rev-parse --verify origin/master > /dev/null 2>&1; then | |
git reset --hard origin/master | |
elif git rev-parse --verify origin/gh-pages > /dev/null 2>&1; then | |
git reset --hard origin/gh-pages | |
else | |
echo "Neither 'master' nor 'gh-pages' branches found in the submodule repository." | |
exit 1 | |
fi | |
cd .. | |
# Commit any changes and sync the latest gh-pages changes | |
git add .gitmodules GCWeb | |
git commit -m "Update submodule GCWeb" --allow-empty | |
git pull --rebase origin gh-pages || true # Sync with remote, ignore rebase errors | |
# Step 6: Force Push to gh-pages Branch with Authentication | |
- name: Configure Remote with GitHub Token | |
run: | | |
cd ${{ github.workspace }}/gh-pages | |
# Set the remote URL to use the GitHub token for authentication | |
git remote set-url origin https://${{ secrets.GH_PAT }}@github.com/${{ github.repository_owner }}/GCWeb.git | |
# Step 7: Force Push to gh-pages | |
- name: Force Push to gh-pages | |
run: | | |
cd ${{ github.workspace }}/gh-pages | |
# Force push changes to gh-pages | |
git push origin gh-pages --force |