Skip to content

Release

Release #15

Workflow file for this run

name: Release
on:
workflow_dispatch:
inputs:
version:
description: 'Version to release (e.g., v1.0.0)'
required: true
jobs:
# Job 1: 检查 Release 是否存在
check-and-create-release:
runs-on: ubuntu-latest
outputs:
upload_required: ${{ steps.check-release.outputs.upload_required }} # 输出是否需要上传 Jar 包
steps:
# 检出代码库
- name: Checkout repository
uses: actions/checkout@v3
# 检查 Release 是否存在
- name: Check and create release
id: check-release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
RELEASE=$(gh release view ${{ github.event.inputs.version }} --json id -q .id || echo "NOT_FOUND")
if [ "$RELEASE" == "NOT_FOUND" ]; then
echo "Release does not exist. Creating release ${{ github.event.inputs.version }}."
gh release create ${{ github.event.inputs.version }} --notes "Release ${{ github.event.inputs.version }}" --target ${{ github.sha }}
echo "upload_required=true" >> $GITHUB_OUTPUT
else
echo "Release ${{ github.event.inputs.version }} already exists."
gh release view ${{ github.event.inputs.version }} --json assets > release_assets.json
echo release_assets.json :
cat release_assets.json
ASSET_NAME="entry-default-unsigned-${{ github.event.inputs.version }}.hap"
ASSET_EXISTS=$(gh release view ${{ github.event.inputs.version }} --json assets -q ".assets[].name" | grep -w "$ASSET_NAME" || echo "NOT_FOUND")
if [ "$ASSET_EXISTS" == "NOT_FOUND" ]; then
echo "Asset $ASSET_NAME does not exist. Upload is required."
echo "upload_required=true" >> $GITHUB_OUTPUT
else
echo "Asset $ASSET_NAME already exists. No upload is required."
echo "upload_required=false" >> $GITHUB_OUTPUT
fi
fi
echo GITHUB_OUTPUT :
cat $GITHUB_OUTPUT
# Job 2: 编译并上传 Hap 文件
build-and-upload:
needs: check-and-create-release # 依赖于 Job 1
if: needs.check-and-create-release.outputs.upload_required == 'true' # 只有当 Release 中的 asset 不存在时才执行
runs-on: ubuntu-latest
container: ghcr.io/sanchuanhehe/harmony-next-pipeline-docker/harmonyos-ci-image:latest
steps:
# 安装依赖 用于编译
- name: install dependencies
run: |
(type -p wget >/dev/null || (apt update && apt-get install wget -y)) \
&& mkdir -p -m 755 /etc/apt/keyrings \
&& out=$(mktemp) && wget -nv -O$out https://cli.github.com/packages/githubcli-archive-keyring.gpg \
&& cat $out | tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null \
&& chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
&& apt update \
&& apt install gh -y
apt update
apt install -y jq curl xz-utils build-essential rsync gh
# 安装 rust 工具链
- name: Install rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: nightly-2024-12-02
# 检出代码库
- name: Checkout repository
uses: actions/checkout@v3
# 构建 Hap 文件
- name: Build Hap file
run: |
export PATH=/opt/harmonyos-tools/command-line-tools/ohpm/bin:$PATH
export PATH=/opt/harmonyos-tools/command-line-tools/bin:$PATH
export OHOS_NDK_HOME=/opt/harmonyos-tools/command-line-tools/sdk/default/openharmony
export OHOS_BASE_SDK_HOME=$OHOS_NDK_HOME
export OHOS_SDK_NATIVE=$OHOS_NDK_HOME
export HOS_SDK_HOME=$OHOS_NDK_HOME
export OHOS_SDK_HOME=$OHOS_NDK_HOME
cargo install -f --git https://github.com/ohos-rs/ohos-rs.git
rustup target add aarch64-unknown-linux-ohos
make all
# 上传 Hap 文件到 Release
- name: Upload Hap to release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
echo "Uploading package to release..."
find . -name "*.hap"
ls -l entry/build/default/outputs/default/entry-default-unsigned.hap
git config --global --add safe.directory $GITHUB_WORKSPACE
gh release upload ${{ github.event.inputs.version }} "entry/build/default/outputs/default/entry-default-unsigned.hap#entry-default-unsigned-${{ github.event.inputs.version }}.hap" --clobber