Build and deploy #1935
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: | | |
# 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" |