Skip to content

ci(deploy): add workflow for CDN deployment #1

ci(deploy): add workflow for CDN deployment

ci(deploy): add workflow for CDN deployment #1

Workflow file for this run

name: Deploy to CDN

Check failure on line 1 in .github/workflows/deploy-cdn.yml

View workflow run for this annotation

GitHub Actions / .github/workflows/deploy-cdn.yml

Invalid workflow file

(Line: 97, Col: 9): Unrecognized named-value: 'secrets'. Located at position 1 within expression: secrets.HUAWEI_CLOUD_AK != '' && secrets.HUAWEI_CLOUD_SK != '' && secrets.HUAWEI_CLOUD_ENDPOINT != '' && secrets.HUAWEI_CLOUD_BUCKET != ''
on:
workflow_dispatch:
env:
HUAWEI_CLOUD_AK: ${{ secrets.HUAWEI_CLOUD_AK }}
HUAWEI_CLOUD_SK: ${{ secrets.HUAWEI_CLOUD_SK }}
HUAWEI_CLOUD_ENDPOINT: ${{ secrets.HUAWEI_CLOUD_ENDPOINT }}
HUAWEI_CLOUD_BUCKET: ${{ secrets.HUAWEI_CLOUD_BUCKET }}
jobs:
build:
runs-on: ubuntu-latest
outputs:
version-timestamp: ${{ steps.prepare-version.outputs.version_timestamp }}
cdn-base: ${{ steps.prepare-version.outputs.cdn_base }}
obs-path: ${{ steps.prepare-version.outputs.obs_path }}
concurrency:
group: deploy-cdn
cancel-in-progress: true
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: 10
run_install: false
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
registry-url: 'https://registry.npmjs.org'
- name: Install dependencies
run: pnpm install
- name: add environment variable
run: |
VITE_ORIGIN_URL="https://agent.opentiny.design/"
cat <<EOF >> designer-demo/env/.env.alpha
# ---- appended by CI (deploy-cdn) ----
VITE_ORIGIN=$VITE_ORIGIN_URL
EOF
echo "VITE_ORIGIN_URL=$VITE_ORIGIN_URL"
- id: prepare-version
name: Prepare version-timestamp
run: |
# Extract version from package.json
VERSION=$(node -p "require('./designer-demo/package.json').version")
# Generate timestamp in YYYYMMDD-HHMMSS format
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
# Combine for version-timestamp
VERSION_TIMESTAMP="${VERSION}-${TIMESTAMP}"
# Set CDN base path
CDN_BASE="https://res-static.opentiny.design/tiny-engine-designer/${VERSION_TIMESTAMP}/"
OBS_PATH="tiny-engine-designer/${VERSION_TIMESTAMP}/"
# Export as environment variables for subsequent steps
echo "VERSION_TIMESTAMP=$VERSION_TIMESTAMP" >> $GITHUB_ENV
echo "CDN_BASE=$CDN_BASE" >> $GITHUB_ENV
echo "OBS_PATH=$OBS_PATH" >> $GITHUB_ENV
# Set outputs for job-level export
echo "version_timestamp=$VERSION_TIMESTAMP" >> $GITHUB_OUTPUT
echo "cdn_base=$CDN_BASE" >> $GITHUB_OUTPUT
echo "obs_path=$OBS_PATH" >> $GITHUB_OUTPUT
echo "Version-Timestamp: $VERSION_TIMESTAMP"
echo "CDN Base: $CDN_BASE"
echo "OBS Path: $OBS_PATH"
- name: Run Build
run: |
set -eo pipefail
pnpm run build:plugin 2>&1 | tee /tmp/build-plugin.log
# Run build:alpha equivalent with --base parameter
pnpm --filter designer-demo build:alpha -- --base=${{ env.CDN_BASE }} 2>&1 | tee /tmp/build-alpha.log
- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: designer-demo-dist
path: ./designer-demo/dist/
retention-days: 1
deploy-cdn:
runs-on: ubuntu-latest
needs: build
if: |
secrets.HUAWEI_CLOUD_AK != '' &&
secrets.HUAWEI_CLOUD_SK != '' &&
secrets.HUAWEI_CLOUD_ENDPOINT != '' &&
secrets.HUAWEI_CLOUD_BUCKET != ''
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Download build artifacts
uses: actions/download-artifact@v4
with:
name: designer-demo-dist
path: ./designer-demo/dist/
- name: Install obsutil
run: |
curl -o obsutil.tar.gz https://obs-community.obs.cn-north-1.myhuaweicloud.com/obsutil/current/obsutil_linux_amd64.tar.gz
tar -xzf obsutil.tar.gz
chmod +x obsutil_linux_amd64_*/obsutil
sudo mv obsutil_linux_amd64_*/obsutil /usr/local/bin/obsutil
- name: Configure and Upload to OBS
run: |
obsutil config -i=${{ env.HUAWEI_CLOUD_AK }} \
-k=${{ env.HUAWEI_CLOUD_SK }} \
-e=${{ env.HUAWEI_CLOUD_ENDPOINT }}
# Upload to versioned path
obsutil cp ./designer-demo/dist \
obs://${{ env.HUAWEI_CLOUD_BUCKET }}/${{ needs.build.outputs.obs-path }} \
-r -f
echo "Uploaded to: obs://${{ env.HUAWEI_CLOUD_BUCKET }}/${{ needs.build.outputs.obs-path }}"
echo "CDN URL: https://res-static.opentiny.design/${{ needs.build.outputs.obs-path }}"