name: Build and Release on: workflow_dispatch: inputs: version: description: 'Version to release' required: false jobs: build-and-release: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Setup Node.js uses: actions/setup-node@v3 with: node-version: '20' # 根据项目需求调整版本 - name: Install dependencies run: npm install - name: Build project run: npm run build - name: Get version from package.json id: get_version run: echo "::set-output name=version::$(node -p "require('./package.json').version")" - name: Determine version id: determine_version run: | if [ "${{ github.event.inputs.version }}" ]; then echo "::set-output name=version::${{ github.event.inputs.version }}" else echo "::set-output name=version::${{ steps.get_version.outputs.version }}" fi - name: Create Release id: create_release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: v${{ steps.determine_version.outputs.version }} release_name: Release v${{ steps.determine_version.outputs.version }} draft: false prerelease: false - name: Package build output run: | zip -r build-v${{ steps.determine_version.outputs.version }}.zip dist - name: Upload Release Asset uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: ./build-v${{ steps.determine_version.outputs.version }}.zip asset_name: build-v${{ steps.determine_version.outputs.version }}.zip asset_content_type: application/zip