name: Deploy to EC2 on: workflow_dispatch: # allow manual run push: branches: - master paths: - 'src/**' - 'public/**' - 'editor/**' 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 compress:images 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/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/roadmap.sh sudo pm2 restart web-roadmap # -------------------- # Clear cloudfront cache # -------------------- - 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 } }'