steps:
  - id: npm_ci
    name: "node:20.18.2"
    entrypoint: /bin/bash
    args:
      - '-c'
      - 'bin/npm_install_subset . libraries/* services/web'

  - id: build-storybook
    name: 'node:20.18.2'
    env:
      - 'BRANCH_NAME=$BRANCH_NAME'
      - 'BUILD_ID=$BUILD_ID'
    script: |
      #!/bin/bash
      set -e
      make -C services/web BRANCH_NAME="${BRANCH_NAME:-$BUILD_ID}" build_storybook

  - id: deploy-storybook
    name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
    env:
      - 'BRANCH_NAME=$BRANCH_NAME'
      - 'BUILD_ID=$BUILD_ID'
      - 'BUCKET=gs://overleaf-dev-storybook'
    dir: services/web
    script: |
      #!/bin/bash
      : ${BRANCH_NAME:=$BUILD_ID}
      [[ "$BRANCH_NAME" ]] || {
        echo 1>&2 "ERROR: BRANCH_NAME not set"
        exit 2
      }
      gsutil -m copy -r storybook-output/* "${BUCKET}/"
    waitFor:
      - build-storybook

  - id: read-storybook-bucket
    name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
    dir: services/web
    env:
      - 'BUCKET=gs://overleaf-dev-storybook'
    script: |
      #!/bin/bash
      set -ex
      gsutil ls "${BUCKET}/" \
      | sed -E "s@^${BUCKET}/([^/]+)/@\1@" \
      > storybook-bucket-listing.txt
    waitFor:
      - deploy-storybook

  - id: create-storybook-index
    name: 'node:20.18.2'
    dir: services/web
    env:
      - 'BRANCH_NAME=$BRANCH_NAME'
    script: |
      #!/bin/bash
      set -ex
      LIST=$(tr '\n' , < storybook-bucket-listing.txt)
      m4 -DLIST="$LIST" -DBRANCH_NAME="$BRANCH_NAME" cloudbuild-storybook-index.html.m4 > storybook-index.html
    waitFor:
      - read-storybook-bucket

  - id: update-storybook-index
    name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
    dir: services/web
    entrypoint: 'gsutil'
    args: [ "copy", "storybook-index.html", "gs://overleaf-dev-storybook/index.html" ]
    waitFor:
      - create-storybook-index
