diff --git a/.github/workflows/vercel.yml b/.github/workflows/vercel.yml new file mode 100644 index 0000000..4c735ed --- /dev/null +++ b/.github/workflows/vercel.yml @@ -0,0 +1,114 @@ +name: Vercel Deployment + +on: + workflow_dispatch: + branches: + - main + inputs: + environment: + type: choice + description: 'Environment' + options: + - preview + - production + +concurrency: + # don't allow multiple deployments at once + group: 'deploy-main' + cancel-in-progress: true + +env: + VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} + VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} + +jobs: + setup: + name: Setup + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Setup Node + uses: actions/setup-node@v3 + with: + node-version-file: '.nvmrc' + cache: 'yarn' + - name: Install + run: yarn install --immutable + - name: Cache + uses: actions/cache@v3 + with: + path: | + node_modules + key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }} + + create_deploy_request: + if: ${{ github.event.inputs.environment == 'preview' }} + needs: [setup] + name: Create Deploy Request + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + # this can probably be removed later + - name: Set short SHA + id: vars + run: | + echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT + deploy-preview: + if: ${{ github.event.inputs.environment == 'preview' }} + name: Deploy Preview + runs-on: ubuntu-latest + needs: [setup, create_deploy_request] + steps: + - name: Checkout Repository + uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Setup Node + uses: actions/setup-node@v3 + with: + node-version-file: '.nvmrc' + cache: 'yarn' + - name: Cache + uses: actions/cache@v3 + with: + path: | + node_modules + key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }} + - name: Setup Environment Variables + run: vercel pull --yes --environment preview --token ${{ secrets.VERCEL_TOKEN }} + - name: Build Preview + run: vercel build --token ${{ secrets.VERCEL_TOKEN }} + - name: Deploy Preview + run: vercel deploy --prebuilt --token ${{ secrets.VERCEL_TOKEN }} + + deploy-production: + if: ${{ github.event.inputs.environment == 'production' }} + name: Deploy Production + runs-on: ubuntu-latest + needs: [setup] + steps: + - name: Checkout Repository + uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Setup Node + uses: actions/setup-node@v3 + with: + node-version-file: '.nvmrc' + cache: 'yarn' + - name: Cache + uses: actions/cache@v3 + with: + path: | + node_modules + key: ${{ runner.os }}-${{ hashFiles('**/yarn.lock') }} + - name: Setup Environment Variables + run: vercel pull --yes --environment production --token ${{ secrets.VERCEL_TOKEN }} + - name: Build Production + run: vercel build --prod --token ${{ secrets.VERCEL_TOKEN }} + - name: Deploy Production + run: vercel deploy --prebuilt --prod --token ${{ secrets.VERCEL_TOKEN }}