Skip to content

Build and deploy

Build and deploy #820

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: 5
steps:
- name: Checkout repository
uses: actions/checkout@v3
- 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
ls -la ../..
ls -la ..
ls -la .
ls -la ./src
ls -la ./src/resources
- name: Zip folder
run: |
zip -r embed.zip ./src/ -x \*/node_modules/\* -x \*/.vitepress/\*
cd src && zip -r db-index.zip * -i '*.md' -x '*/node_modules/*' -x '*/_source/*'
- name: Upload build
uses: actions/upload-artifact@v3
with:
if-no-files-found: error
name: embed-${{ github.sha }}
path: embed.zip
- name: Upload DB index
uses: actions/upload-artifact@v3
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@v3
- name: Prepare
uses: ./.github/actions/checkout-install
with:
apt: true
- uses: actions/download-artifact@v3
with:
name: embed-${{ github.sha }}
- name: Unzip artifact
run: |
unzip -o embed.zip
- name: Test
run: |
export NODE_OPTIONS="--max-old-space-size=8096"
pnpm run test
build:
name: Build
runs-on: ubuntu-latest
timeout-minutes: 60
needs: embed-docs
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Prepare
uses: ./.github/actions/checkout-install
with:
apt: true
- uses: actions/download-artifact@v3
with:
name: embed-${{ github.sha }}
- name: Unzip artifact
run: |
unzip -o embed.zip
- name: Collect Workflow Telemetry
uses: runforesight/workflow-telemetry-action@v1
- name: Build project
run: |
export NODE_OPTIONS="--max-old-space-size=8096"
export USERCENTRICS="65ynhGFvE"
pnpm run build
#- name: Zip externals
# run: |
# cd external && zip -r db-external.zip * -i '*.md'
- name: Zip folder
run: zip -r full-build.zip .vitepress/dist/ vercel.json
- name: Upload build
uses: actions/upload-artifact@v3
with:
if-no-files-found: error
name: full-build-${{ github.sha }}
path: full-build.zip
#- name: Upload external
# uses: actions/upload-artifact@v3
# 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: 60
needs:
- embed-docs
- build
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Prepare
uses: ./.github/actions/checkout-install
with:
apt: true
- uses: actions/download-artifact@v3
with:
name: embed-${{ github.sha }}
- uses: actions/download-artifact@v3
with:
name: full-build-${{ github.sha }}
- name: Unzip artifact
run: |
unzip -o embed.zip
- name: Unzip artifact
run: |
mkdir -p .vitepress/dist
unzip -o full-build.zip
ls -la .vitepress/dist
- name: Test
run: |
export NODE_OPTIONS="--max-old-space-size=8096"
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@v3
# 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-dev
- 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@v3
- uses: actions/download-artifact@v3
with:
name: full-build-${{ github.sha }}
- name: Unzip artifact
run: |
mkdir -p .vitepress/dist
unzip -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@v3
with:
name: db-index-${{ github.sha }}
#- uses: actions/download-artifact@v3
# with:
# name: db-external-${{ github.sha }}
- name: Merge base and external sources
run: |
mkdir merged
unzip -o db-index.zip -d merged
true || unzip -o db-external.zip -d merged
cd merged; zip -r ../db-merged.zip *
- 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 [email protected] $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"