-
Notifications
You must be signed in to change notification settings - Fork 4
110 lines (96 loc) · 4.7 KB
/
Copy pathRelease.yaml
File metadata and controls
110 lines (96 loc) · 4.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
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