name: ๐Ÿ—๏ธ Build and Deploy on: push: branches: ["*"] env: PNPM_CACHE_FOLDER: .pnpm-store jobs: setup: runs-on: ubuntu-latest container: jimfx/nodes:latest steps: - name: ๐Ÿ“‘ Checkout Code uses: actions/checkout@v4 - name: ๐Ÿ’พ Setup pnpm Cache uses: actions/cache@v4 with: path: ${{ env.PNPM_CACHE_FOLDER }} key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | ${{ runner.os }}-pnpm- - name: ๐Ÿ“ฆ Install Dependencies run: pnpm install --frozen-lockfile --store-dir ${{ env.PNPM_CACHE_FOLDER }} - name: ๐Ÿ—œ๏ธ Tar Workspace run: tar -cf workspace.tar --exclude="${{ env.PNPM_CACHE_FOLDER }}" . - name: ๐Ÿ“ค Upload Workspace uses: actions/upload-artifact@v3 with: name: workspace-deps path: workspace.tar compression-level: 0 lint: needs: setup runs-on: ubuntu-latest container: jimfx/nodes:latest steps: - name: ๐Ÿ“ฅ Download Workspace uses: actions/download-artifact@v3 with: name: workspace-deps - name: ๐Ÿ”“ Untar Workspace run: tar -xf workspace.tar && rm workspace.tar - name: ๐Ÿงน Run Linter run: pnpm lint format: needs: setup runs-on: ubuntu-latest container: jimfx/nodes:latest steps: - name: ๐Ÿ“ฅ Download Workspace uses: actions/download-artifact@v3 with: name: workspace-deps - name: ๐Ÿ”“ Untar Workspace run: tar -xf workspace.tar && rm workspace.tar - name: ๐ŸŽจ Check Formatting run: pnpm format:check typecheck: needs: setup runs-on: ubuntu-latest container: jimfx/nodes:latest steps: - name: ๐Ÿ“ฅ Download Workspace uses: actions/download-artifact@v3 with: name: workspace-deps - name: ๐Ÿ”“ Untar Workspace run: tar -xf workspace.tar && rm workspace.tar - name: ๐Ÿงฌ Type Check run: pnpm check build_and_deploy: if: github.ref == 'refs/heads/main' needs: [lint, format, typecheck] runs-on: ubuntu-latest container: jimfx/nodes:latest steps: - name: ๐Ÿ“ฅ Download Workspace uses: actions/download-artifact@v3 with: name: workspace-deps - name: ๐Ÿ”“ Untar Workspace run: tar -xf workspace.tar && rm workspace.tar - name: ๐Ÿ› ๏ธ Build Site run: pnpm run build:deploy - name: ๐Ÿ”‘ Configure rclone run: | mkdir -p ~/.config/rclone cat < ~/.config/rclone/rclone.conf [sftp-remote] type = sftp host = ${SSH_HOST} user = ${SSH_USER} port = ${SSH_PORT} key_use_agent = false key_data = ${SSH_PRIVATE_KEY} EOF env: SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} SSH_HOST: ${{ vars.SSH_HOST }} SSH_PORT: ${{ vars.SSH_PORT }} SSH_USER: ${{ vars.SSH_USER }} - name: ๐Ÿšš Deploy via rclone run: | rclone sync --update -v --progress --exclude "_astro/**" --stats 2s --stats-one-line ./app/build/ sftp-remote:${REMOTE_DIR} --transfers 4 env: REMOTE_DIR: ${{ vars.REMOTE_DIR }}