From fd55a5283961636d54a593a888ab513a29eb8f89 Mon Sep 17 00:00:00 2001 From: Kamran Ahmed Date: Thu, 11 Apr 2024 22:12:54 +0100 Subject: [PATCH] Update deployment workflow --- .github/workflows/deployment.yml | 105 ++++++++++++++++++++----------- .github/workflows/rsync-ssr.yml | 74 ---------------------- 2 files changed, 69 insertions(+), 110 deletions(-) delete mode 100644 .github/workflows/rsync-ssr.yml diff --git a/.github/workflows/deployment.yml b/.github/workflows/deployment.yml index 029b077a3..979df4508 100644 --- a/.github/workflows/deployment.yml +++ b/.github/workflows/deployment.yml @@ -1,41 +1,74 @@ -name: App Deployment +name: Deploy to EC2 on: + workflow_dispatch: # allow manual run push: - branches: [ master ] -env: - PUBLIC_API_URL: "https://api.roadmap.sh" - PUBLIC_EDITOR_APP_URL: "https://draw.roadmap.sh" - PUBLIC_AVATAR_BASE_URL: "https://dodrc8eu8m09s.cloudfront.net/avatars" - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - CI: true + branches: + - master jobs: - build: + deploy: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - with: - persist-credentials: false - - uses: actions/setup-node@v1 - with: - node-version: 18 - - name: Prepare Draw Repository - run: | - git clone https://${{ secrets.GH_PAT }}@github.com/roadmapsh/web-draw.git .temp/web-draw --depth 1 - - uses: pnpm/action-setup@v2.2.2 - with: - version: 7.13.4 - - name: Setup Environment - run: | - pnpm install - - name: Generate meta and build - run: | - npm run generate-renderer - npm run build - touch ./dist/.nojekyll - echo 'roadmap.sh' > ./dist/CNAME - - name: Deploy to GH Pages - run: | - git config user.email "kamranahmed.se@gmail.com" - git config user.name "Kamran Ahmed" - git remote set-url origin https://x-access-token:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git - npm run deploy + - name: Checkout code + uses: actions/checkout@v2 + with: + fetch-depth: 2 + - uses: actions/setup-node@v1 + with: + node-version: 20 + - uses: pnpm/action-setup@v3.0.0 + with: + version: 8.15.6 + + # -------------------- + # Setup configuration + # -------------------- + - name: Prepare configuration files + run: | + git clone https://${{ secrets.GH_PAT }}@github.com/roadmapsh/infra-config.git configuration --depth 1 + - name: Copy configuration files + run: | + cp configuration/dist/github/developer-roadmap.env .env + + # -------------------- + # Prepare the build + # -------------------- + - name: Install dependencies + run: | + pnpm install + - name: Generate build + run: | + git clone https://${{ secrets.GH_PAT }}@github.com/roadmapsh/web-draw.git .temp/web-draw --depth 1 + npm run generate-renderer + npm run build + + # -------------------- + # Deploy to EC2 + # -------------------- + - uses: webfactory/ssh-agent@v0.7.0 + with: + ssh-private-key: ${{ secrets.EC2_PRIVATE_KEY }} + - name: Deploy app to EC2 + run: | + rsync -apvz --delete --no-times --exclude "configuration" -e "ssh -o StrictHostKeyChecking=no" -p ./ ${{ secrets.EC2_USERNAME }}@${{ secrets.EC2_HOST }}:/var/www/v2.roadmap.sh/ + - name: Restart PM2 + uses: appleboy/ssh-action@master + with: + host: ${{ secrets.EC2_HOST }} + username: ${{ secrets.EC2_USERNAME }} + key: ${{ secrets.EC2_PRIVATE_KEY }} + script: | + cd /var/www/v2.roadmap.sh + sudo pm2 restart web-roadmap + + # -------------------- + # Clear Cloudfront Caching + # -------------------- + - name: Clear Cloudfront Caching + run: | + curl -L \ + -X POST \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: Bearer ${{ secrets.GH_PAT }}" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/repos/roadmapsh/infra-ansible/actions/workflows/playbook.yml/dispatches \ + -d '{ "ref":"master", "inputs": { "playbook": "roadmap_web.yml", "tags": "cloudfront", "is_verbose": false } }' \ No newline at end of file diff --git a/.github/workflows/rsync-ssr.yml b/.github/workflows/rsync-ssr.yml deleted file mode 100644 index 565ad5c6a..000000000 --- a/.github/workflows/rsync-ssr.yml +++ /dev/null @@ -1,74 +0,0 @@ -name: Deploy to EC2 -on: - workflow_dispatch: # allow manual run - push: - branches: - - feat/ssr -jobs: - deploy: - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v2 - with: - fetch-depth: 2 - - uses: actions/setup-node@v1 - with: - node-version: 20 - - uses: pnpm/action-setup@v3.0.0 - with: - version: 8.15.6 - - # -------------------- - # Setup configuration - # -------------------- - - name: Prepare configuration files - run: | - git clone https://${{ secrets.GH_PAT }}@github.com/roadmapsh/infra-config.git configuration --depth 1 - - name: Copy configuration files - run: | - cp configuration/dist/github/developer-roadmap.env .env - - # -------------------- - # Prepare the build - # -------------------- - - name: Install dependencies - run: | - pnpm install - - name: Generate build - run: | - git clone https://${{ secrets.GH_PAT }}@github.com/roadmapsh/web-draw.git .temp/web-draw --depth 1 - npm run generate-renderer - npm run build - - # -------------------- - # Deploy to EC2 - # -------------------- - - uses: webfactory/ssh-agent@v0.7.0 - with: - ssh-private-key: ${{ secrets.EC2_PRIVATE_KEY }} - - name: Deploy app to EC2 - run: | - rsync -apvz --delete --no-times --exclude "configuration" -e "ssh -o StrictHostKeyChecking=no" -p ./ ${{ secrets.EC2_USERNAME }}@${{ secrets.EC2_HOST }}:/var/www/v2.roadmap.sh/ - - name: Restart PM2 - uses: appleboy/ssh-action@master - with: - host: ${{ secrets.EC2_HOST }} - username: ${{ secrets.EC2_USERNAME }} - key: ${{ secrets.EC2_PRIVATE_KEY }} - script: | - cd /var/www/v2.roadmap.sh - sudo pm2 restart web-roadmap - - # -------------------- - # Clear Cloudfront Caching - # -------------------- - - name: Clear Cloudfront Caching - run: | - curl -L \ - -X POST \ - -H "Accept: application/vnd.github+json" \ - -H "Authorization: Bearer ${{ secrets.GH_PAT }}" \ - -H "X-GitHub-Api-Version: 2022-11-28" \ - https://api.github.com/repos/roadmapsh/infra-ansible/actions/workflows/playbook.yml/dispatches \ - -d '{ "ref":"master", "inputs": { "playbook": "roadmap_web.yml", "tags": "cloudfront", "is_verbose": false } }' \ No newline at end of file