Build and deploy #1692
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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" |