Skip to content

Build and deploy to server #18286

Build and deploy to server

Build and deploy to server #18286

Workflow file for this run

name: Build and deploy to server
on:
push:
branches: ["master"]
paths-ignore:
- ".github/**"
- ".docs/**"
workflow_dispatch:
inputs:
hash:
description: "Docs Staging Hash"
type: string
default: main
required: true
fallback:
description: "Fallback by hash"
type: boolean
default: false
required: false
nocache:
description: "Build without cache"
type: boolean
default: false
required: false
concurrency: ci-prod
jobs:
build:
runs-on: ubuntu-latest
name: Build website
steps:
- name: Check disk usage
run: df -h
- name: Remove unused Docker images
run: docker system prune -af
- uses: actions/checkout@v3
with:
ref: "master"
- uses: actions/setup-node@v3
with:
node-version: 16
cache: "yarn"
- name: Update submodule
id: submodule
run: |
git submodule init
git submodule update --remote
cd docs
git checkout main
cd ..
echo "submodule_sha=$(git submodule status | awk '{print $1}' | sed -r 's/[+-]+//g')" >> $GITHUB_OUTPUT
echo "submodule_status=$(git submodule status)" >> $GITHUB_OUTPUT
echo "git_sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
echo "build_date=$(date)" >> $GITHUB_OUTPUT
- name: Install deps
run: yarn
- name: Calc gatsby cache key
id: calc-cache-key
run: |
if ${{ !!inputs.fallback }}
then
echo "key=${{ inputs.hash }}" >> $GITHUB_OUTPUT
else
echo "key=${{ steps.submodule.outputs.submodule_sha }}" >> $GITHUB_OUTPUT
fi
- name: Restore gatsby cache
uses: actions/cache@v3
id: gatsby-cache
with:
path: |
.cache
public
key: ${{ runner.os }}-gatsby-cache-docs-staging-${{ steps.calc-cache-key.outputs.key }}
restore-keys: |
${{ runner.os }}-gatsby-cache-docs-staging-
- name: Clean up temporary files
run: |
sudo rm -rf /tmp/*
sudo rm -rf /home/runner/work/_temp/*
- name: Clean cache
if: ${{ inputs.nocache }}
run: |
yarn clean
- name: Build website
if: ${{ !inputs.fallback || (steps.gatsby-cache.outputs.cache-hit != 'true') }}
env:
CI: true
GATSBY_ALGOLIA_APPLICATION_ID: ${{ secrets.ALGOLIA_APPLICATION_ID }}
GATSBY_ALGOLIA_API_KEY: ${{ secrets.ALGOLIA_API_KEY }}
GATSBY_DOC_BUILD_DATE: ${{ steps.submodule.outputs.build_date }}
GATSBY_DOC_BUILD_GIT_SHA: ${{ steps.submodule.outputs.git_sha }}
GATSBY_DOC_BUILD_SUBMODULE_SHA: ${{ steps.submodule.outputs.submodule_status }}
GATSBY_SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
run: |
yarn build
- name: Check output
id: check-output
run: |
sudo apt install tree
tree public
- name: Install coscli
run: |
wget https://cosbrowser.cloud.tencent.com/software/coscli/coscli-linux-amd64
mv coscli-linux-amd64 coscli
chmod 755 coscli
- name: Deploy to COS
run: |
./coscli sync public/ cos://${{ secrets.TENCENTCLOUD_BUCKET_ID }} \
--init-skip \
--recursive \
--routines 16 \
--secret-id ${{ secrets.TENCENTCLOUD_SECRET_ID }} \
--secret-key ${{ secrets.TENCENTCLOUD_SECRET_KEY }} \
--endpoint cos.na-ashburn.myqcloud.com \
--delete \
--exclude ".*\.(md|txt)$" \
--force
- name: Deploy md to COS
run: |
./coscli sync public/ cos://${{ secrets.TENCENTCLOUD_BUCKET_ID }} \
--init-skip \
--recursive \
--routines 16 \
--secret-id ${{ secrets.TENCENTCLOUD_SECRET_ID }} \
--secret-key ${{ secrets.TENCENTCLOUD_SECRET_KEY }} \
--endpoint cos.na-ashburn.myqcloud.com \
--include ".*\.(md|txt)$" \
--meta "Content-Type:text/plain; charset=utf-8" \
--force
cdn-refresh:
needs: build
runs-on: ubuntu-latest
name: Refresh CDN Cache
env:
TENCENTCLOUD_SECRET_ID: ${{ secrets.TENCENTCLOUD_SECRET_ID }}
TENCENTCLOUD_SECRET_KEY: ${{ secrets.TENCENTCLOUD_SECRET_KEY }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Python environment
uses: actions/setup-python@v5
with:
python-version: "3.12"
architecture: "x64"
- name: Install Tencent Cloud CLI
run: pipx install tccli
- name: Purge production CDN cache
run: tccli cdn PurgePathCache --Paths '["https://docs.pingcap.com/"]' --FlushType flush