← 返回项目详情
此成果详情页已在新标签打开。查看完成后,可关闭当前标签返回原项目页,也可以点击“返回项目详情”。网页不会强制关闭浏览器标签。

成果详情 / 数据、代码与可复现资产

GitHub Actions OIDC 部署示例

原始文件名oidc-workflow-sample.yml

工作流示例 · YAML1.5 KB脱敏后公开
内容说明
展示公开结构化示例中的权限声明、Node 设置、validate/build、dist/index.html 门禁、OIDC 登录和 upload-batch 步骤;真实资源值使用占位符。
能够证明
支持工作流采用短期 OIDC 身份、最小化权限表达和构建后上传顺序。
不能证明
不证明示例可直接用于任意仓库、不包含真实 secret 值,也不证明当前工作流配置仍在云端运行。
许可说明
MIT License(自行编写的 workflow 示例)
来源和脱敏说明
根据本地 workflow 结构生成的公开 structural sample,已使用占位符且不含真实账户或资源值。

预览

站内查看方式

以 YAML 纯文本预览,HTML 转义后不执行 workflow。

name: Deploy static portfolio (public sample)

on:
  push:
    branches: [master]
  workflow_dispatch:

permissions:
  contents: read
  id-token: write

concurrency:
  group: static-portfolio-${{ github.ref }}
  cancel-in-progress: false

jobs:
  deploy:
    runs-on: ubuntu-latest
    env:
      AZURE_CORE_OUTPUT: none
    steps:
      - name: Checkout
        uses: actions/checkout@v6
        with:
          persist-credentials: false
      - name: Setup Node.js
        uses: actions/setup-node@v6
        with:
          node-version: '22.23.2'
          cache: npm
          cache-dependency-path: package-lock.json
      - name: Install dependencies
        run: npm ci
      - name: Validate
        run: npm run validate
      - name: Build
        run: npm run build
      - name: Verify build output
        run: |
          test -d dist
          test -f dist/index.html
      - name: Azure login
        uses: azure/login@v3
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
      - name: Upload to Azure Storage
        run: |
          az storage blob upload-batch \
            --account-name <STORAGE_ACCOUNT_NAME> \
            --destination '$web' \
            --source dist \
            --auth-mode login \
            --overwrite true \
            --only-show-errors
      - name: Azure logout
        if: always()
        run: az logout

公开包完整性

SHA-256 摘要

9f19a87140de1df332ad93bbc37478ec776b8bdebd40e9c4d0a2c6a11bc7e71f