Skip to content

Build and deploy #1692

Build and deploy

Build and deploy #1692

name: Build and deploy
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
on:
workflow_dispatch:
inputs:
source:
description: 'Source of event'
required: false
default: 'No source specified'
push:
branches:
- main
pull_request:
branches:
- main
jobs:
embed-docs:
name: Embed docs
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Prepare
uses: ./.github/actions/checkout-install
# @T00D00 - "pnpm run build" fails with symlinks
- name: Clone sub-docs
env:
GITLAB_FRONTENDS_USERNAME: ${{ secrets.GITLAB_FRONTENDS_USERNAME }}
GITLAB_FRONTENDS_ACCESS_KEY: ${{ secrets.GITLAB_FRONTENDS_ACCESS_KEY }}
FIGMA_TOKEN: ${{ secrets.FIGMA_TOKEN }}
FIGMA_FILE: ${{ secrets.FIGMA_FILE }}
run: |
chmod +x ./.github/scripts/embed.sh
.github/scripts/embed.sh
- name: Zip folder
run: |
zip -q -r embed.zip ./src/ -x \*/node_modules/\* -x \*/.vitepress/\*
zip -q -r embed.zip ./src/frontends/_source/apps/ -x \*/node_modules/\*
cd src && zip -q -r db-index.zip * -i '*.md' -x '*/node_modules/*' -x '*/_source/*'
- name: Upload build
uses: actions/upload-artifact@v4
with:
if-no-files-found: error
name: embed-${{ github.sha }}
path: embed.zip
- name: Upload DB index
uses: actions/upload-artifact@v4
with:
if-no-files-found: error
name: db-index-${{ github.sha }}
path: src/db-index.zip
test-dev:
name: Test dev
runs-on: ubuntu-latest
timeout-minutes: 10
needs: embed-docs
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Prepare
uses: ./.github/actions/checkout-install
with:
apt: true
- uses: actions/download-artifact@v4
with:
name: embed-${{ github.sha }}
- name: Unzip artifact
run: |
unzip -q -o embed.zip
- name: Test
run: |
export NODE_OPTIONS="--max-old-space-size=12288"
pnpm -C ./src/frontends/_source/ i
pnpm run test
build:
name: Build
runs-on: ubuntu-latest
timeout-minutes: 30
needs: embed-docs
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Prepare
uses: ./.github/actions/checkout-install
with:
apt: true
- uses: actions/download-artifact@v4
with:
name: embed-${{ github.sha }}
- name: Unzip artifact
run: |
unzip -q -o embed.zip
- name: Collect Workflow Telemetry
uses: catchpoint/workflow-telemetry-action@v2
- name: Build project
run: |
export NODE_OPTIONS="--max-old-space-size=12288"
export USERCENTRICS="65ynhGFvE"
pnpm -C ./src/frontends/_source/ i
pnpm run build
#- name: Zip externals
# run: |
# cd external && zip -r db-external.zip * -i '*.md'
- name: Zip folder
run: zip -q -r full-build.zip .vitepress/dist/ vercel.json
- name: Upload build
uses: actions/upload-artifact@v4
with:
if-no-files-found: error
name: full-build-${{ github.sha }}
path: full-build.zip
#- name: Upload external
# uses: actions/upload-artifact@v4
# with:
# if-no-files-found: error
# name: db-external-${{ github.sha }}
# path: external/db-external.zip
test-build:
name: Test build
runs-on: ubuntu-latest
timeout-minutes: 10
needs:
- embed-docs
- build
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Prepare
uses: ./.github/actions/checkout-install
with:
apt: true
- uses: actions/download-artifact@v4
with:
name: embed-${{ github.sha }}
- uses: actions/download-artifact@v4
with:
name: full-build-${{ github.sha }}
- name: Unzip artifact
run: |
unzip -q -o embed.zip
- name: Unzip artifact
run: |
mkdir -p .vitepress/dist
unzip -q -o full-build.zip
ls -la .vitepress/dist
- name: Test
run: |
export NODE_OPTIONS="--max-old-space-size=12288"
pnpm -C ./src/frontends/_source/ i
pnpm run test:build
# chromatic:
# name: Deploy Storybook to Chromatic
# runs-on: ubuntu-latest
# timeout-minutes: 10
# needs:
# - test-cli
# - test-dev
# - test-build
# - build
# if: ${{ github.ref == 'refs/heads/main' || contains(github.event.head_commit.message, 'chromatic') }}
# steps:
# - name: Checkout repository
# uses: actions/checkout@v4
# with:
# fetch-depth: 0
#
# - name: Prepare
# uses: ./.github/actions/checkout-install
#
# - name: Deploy Storybook to Chromatic
# env:
# CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }}
# run: pnpm chromatic
deploy-vercel:
name: Deploy to Vercel
runs-on: ubuntu-latest
timeout-minutes: 15
needs:
- test-build
- build
env:
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
name: full-build-${{ github.sha }}
- name: Unzip artifact
run: |
mkdir -p .vitepress/dist
unzip -q -o full-build.zip
ls -la .vitepress/dist
- name: Install Vercel CLI
run: npm install -g vercel@latest
- name: Pull Vercel Environment Information
run: |
VERCEL_ENV="preview"
VERCEL_ENV_FLAG=""
if [[ "${{github.ref}}" == "refs/heads/main" ]]; then
VERCEL_ENV="production"
VERCEL_ENV_FLAG="--prod"
fi
vercel pull --yes --environment=$VERCEL_ENV --token=${{ secrets.VERCEL_TOKEN }} --scope=${{ secrets.VERCEL_ORG_ID }}
vercel build ./.vitepress/dist --token=${{ secrets.VERCEL_TOKEN }} $VERCEL_ENV_FLAG
vercel deploy --prebuilt --token=${{ secrets.VERCEL_TOKEN }} $VERCEL_ENV_FLAG > ./vercel.env
rebuild-index:
name: Send documents
runs-on: ubuntu-latest
timeout-minutes: 5
needs:
- embed-docs
- deploy-vercel
steps:
- uses: actions/download-artifact@v4
with:
name: db-index-${{ github.sha }}
#- uses: actions/download-artifact@v4
# with:
# name: db-external-${{ github.sha }}
- name: Merge base and external sources
run: |
mkdir merged
unzip -q -o db-index.zip -d merged
true || unzip .q -o db-external.zip -d merged
cd merged; zip -q -r ../db-merged.zip *
- name: Cleanup zip
run: |
zip -d db-merged.zip \
'**/_source/**' \
'docs/**/YYYY-MM-DD-template.md' \
'docs/**/snippets/**' \
'**/README.md'
- name: Send artifact
env:
KNOWLEDGE_URL: ${{ secrets.KNOWLEDGE_URL }}
KNOWLEDGE_API_KEY: ${{ secrets.KNOWLEDGE_API_KEY }}
run: |
COLLECTION_PARAM=""
COLLECTION=""
if [[ "${GITHUB_REF##*/}" != "refs/heads/main" ]]; then
BRANCH=$(echo "${GITHUB_REF##*/}" | sed 's/refs\/heads\///' | tr '[:upper:]' '[:lower:]' | tr '/' '_')
COLLECTION="shopware--developer-portal--$BRANCH"
COLLECTION_PARAM="-F collection=\"${COLLECTION}\""
fi
echo "Collection: ${COLLECTION}"
echo "Uploading documents"
curl -v \
--fail-with-body \
-F content=@db-merged.zip $COLLECTION_PARAM \
-H "X-Shopware-Api-Key: $KNOWLEDGE_API_KEY" \
"${KNOWLEDGE_URL}/upload-input"
echo "Ingesting documents"
curl \
--fail-with-body \
-X POST \
--data "{\"collection\":\"${COLLECTION}\"}" \
-H "Content-Type: application/json" \
-H "X-Shopware-Api-Key: $KNOWLEDGE_API_KEY" \
"${KNOWLEDGE_URL}/ingest"
echo "Documents ingested"