Skip to content

Build and deploy

Build and deploy #1798

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: |
# find ./src -type d \( -name "node_modules" -o -name ".git" \) -prune -exec rm -rf {} +
#
# du -h -d 1 src
#
# echo "Creating full dump; including sources; excluding node_modules"
# zip -q -r -T embed.zip ./src/ -x \*/node_modules/\* -y
#
# echo "Creating DB index"
# cd src && zip -q -r db-index.zip * -i '*.md' -x '*/node_modules/*' -x '*/_source/*' -y
- name: Upload build
uses: actions/upload-artifact@v4
with:
path: |
./src/**
!./src/**/node_modules/**
if-no-files-found: error
name: embed-${{ github.sha }}
include-hidden-files: true
# path: embed.zip
- name: Upload DB index
uses: actions/upload-artifact@v4
with:
path: |
./src/**/*.md
!./src/**/node_modules/**
!./src/**/_source/**
if-no-files-found: error
name: db-index-${{ github.sha }}
include-hidden-files: true
# 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 }}
path: src
- name: Display structure of downloaded files
run: |
ls -la
find src -type d
find src -type l
find src -type f -name '*.md'
find src -type f -name '*.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 }}
path: src
- 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: Upload build
uses: actions/upload-artifact@v4
with:
if-no-files-found: error
name: full-build-${{ github.sha }}
path: |
.vitepress/dist/
vercel.json
#- 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 }}
path: src
- uses: actions/download-artifact@v4
with:
name: full-build-${{ github.sha }}
- name: Test
run: |
export NODE_OPTIONS="--max-old-space-size=12288"
pnpm -C ./src/frontends/_source/ i
pnpm run test:build
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: 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 }}
path: merged
# - uses: actions/download-artifact@v4
# with:
# name: db-external-${{ github.sha }}
- name: Merge base and external sources
run: |
cd merged; zip -q -r ../db-merged.zip *
# mkdir merged
# unzip -q -o db-index.zip -d merged
# true || unzip .q -o db-external.zip -d merged
- 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 [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"