mirror of
https://github.com/EasyTier/EasyTier.git
synced 2026-08-06 12:39:51 +00:00
206 lines
7.0 KiB
YAML
206 lines
7.0 KiB
YAML
name: ohos
|
|
|
|
on:
|
|
push:
|
|
branches: [develop, main, "releases/**", "ohos/**"]
|
|
tags:
|
|
- "v*"
|
|
- "!*-pre"
|
|
pull_request:
|
|
branches: [develop, main, "ohos/**"]
|
|
types: [opened, synchronize, reopened, ready_for_review]
|
|
workflow_dispatch:
|
|
inputs:
|
|
publish:
|
|
description: Publish this non-main branch and dispatch downstream builds
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
|
|
permissions:
|
|
contents: read
|
|
pull-requests: read
|
|
|
|
env:
|
|
CARGO_TERM_COLOR: always
|
|
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
|
|
jobs:
|
|
ohos:
|
|
name: ohos
|
|
if: github.event_name != 'pull_request' || !github.event.pull_request.draft
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v5
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Set up Rust
|
|
uses: ./.github/actions/prepare-build
|
|
with:
|
|
target: aarch64-unknown-linux-ohos
|
|
gui: false
|
|
pnpm: false
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Set up HarmonyOS
|
|
uses: ErBWs/setup-ohos@v1
|
|
|
|
- name: Install ohrs
|
|
uses: taiki-e/install-action@v2
|
|
with:
|
|
tool: ohrs
|
|
|
|
- name: Build HAR
|
|
id: package
|
|
env:
|
|
DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
|
|
run: |
|
|
set -euo pipefail
|
|
sudo apt-get install -qqy \
|
|
pkg-config curl libgl1-mesa-dev expect llvm clang lldb lld
|
|
rustup component add rustfmt
|
|
cargo fmt --all --manifest-path \
|
|
easytier-contrib/easytier-ohrs/Cargo.toml -- --check
|
|
|
|
cargo_version=$(cargo metadata --format-version 1 --no-deps \
|
|
--manifest-path easytier/Cargo.toml | jq -r '.packages[0].version')
|
|
last_tag=$(git describe --tags --abbrev=0 HEAD 2>/dev/null || true)
|
|
if [ -n "$last_tag" ]; then
|
|
base_version=$(printf '%s\n' "$cargo_version" "${last_tag#v}" \
|
|
| sort -V | tail -n 1)
|
|
commit_count=$(git rev-list --count "$last_tag..HEAD")
|
|
else
|
|
base_version=$cargo_version
|
|
commit_count=0
|
|
fi
|
|
|
|
source_branch=${GITHUB_HEAD_REF:-}
|
|
if [ -z "$source_branch" ]; then
|
|
if [ "$GITHUB_REF_TYPE" = branch ]; then
|
|
source_branch=$GITHUB_REF_NAME
|
|
else
|
|
source_branch=${DEFAULT_BRANCH:-main}
|
|
fi
|
|
fi
|
|
branch_id=$(printf '%s' "$source_branch" \
|
|
| tr '[:upper:]' '[:lower:]' \
|
|
| sed -E 's/[^a-z0-9-]+/-/g; s/^-+//; s/-+$//' \
|
|
| cut -c1-64)
|
|
branch_id=${branch_id:-main}
|
|
|
|
package_name=easytier-ohrs
|
|
package_version="${base_version}-${branch_id}-${commit_count}-${GITHUB_RUN_NUMBER}-${GITHUB_RUN_ATTEMPT}-g$(git rev-parse --short=8 HEAD)"
|
|
echo "name=$package_name" >> "$GITHUB_OUTPUT"
|
|
echo "EASYTIER_PACKAGE_NAME=$package_name" >> "$GITHUB_ENV"
|
|
echo "EASYTIER_VERSION=$package_version" >> "$GITHUB_ENV"
|
|
|
|
package_dir=easytier-contrib/easytier-ohrs/package
|
|
jq --arg name "$package_name" --arg version "$package_version" \
|
|
'.name = $name | .version = $version' \
|
|
"$package_dir/oh-package.json5" > "$package_dir/oh-package.tmp.json5"
|
|
mv "$package_dir/oh-package.tmp.json5" "$package_dir/oh-package.json5"
|
|
{
|
|
echo "## $package_name $package_version"
|
|
echo
|
|
echo "- Core version: $base_version"
|
|
echo "- Core commit: $GITHUB_SHA"
|
|
git log -1 --pretty=format:'- %s'
|
|
echo
|
|
} > "$package_dir/CHANGELOG.md"
|
|
|
|
sudo mkdir -p "$OHOS_NDK_HOME/native/llvm"
|
|
sudo tee "$OHOS_NDK_HOME/native/llvm/aarch64-unknown-linux-ohos-clang.sh" >/dev/null <<'EOF'
|
|
#!/bin/sh
|
|
exec "$OHOS_NDK_HOME/native/llvm/bin/clang" \
|
|
-target aarch64-linux-ohos \
|
|
--sysroot="$OHOS_NDK_HOME/native/sysroot" \
|
|
-D__MUSL__ "$@"
|
|
EOF
|
|
sudo chmod +x \
|
|
"$OHOS_NDK_HOME/native/llvm/aarch64-unknown-linux-ohos-clang.sh"
|
|
|
|
cd easytier-contrib/easytier-ohrs
|
|
source env.sh
|
|
ohrs build --release --arch aarch
|
|
ohrs artifact
|
|
mv package.har "$package_name.har"
|
|
|
|
- name: Upload HAR
|
|
uses: actions/upload-artifact@v5
|
|
with:
|
|
name: ${{ steps.package.outputs.name }}
|
|
path: easytier-contrib/easytier-ohrs/${{ steps.package.outputs.name }}.har
|
|
retention-days: 5
|
|
if-no-files-found: error
|
|
|
|
- name: Publish and dispatch
|
|
if: >-
|
|
(github.event_name == 'push' &&
|
|
github.ref_type == 'branch' &&
|
|
github.ref_name == 'main' &&
|
|
github.event.forced != true) ||
|
|
(github.event_name == 'workflow_dispatch' &&
|
|
github.ref_type == 'branch' &&
|
|
(github.ref_name == 'main' || inputs.publish))
|
|
working-directory: easytier-contrib/easytier-ohrs
|
|
env:
|
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
CODEARTS_PRIVATE_OHPM: ${{ secrets.CODEARTS_PRIVATE_OHPM }}
|
|
DOWNSTREAM_DISPATCH_TOKEN: ${{ secrets.DOWNSTREAM_DISPATCH_TOKEN }}
|
|
run: |
|
|
set -euo pipefail
|
|
if [ "$GITHUB_EVENT_NAME" = push ]; then
|
|
pull_requests=$(gh api \
|
|
-H "Accept: application/vnd.github+json" \
|
|
"/repos/$GITHUB_REPOSITORY/commits/$GITHUB_SHA/pulls")
|
|
if ! jq -e \
|
|
--arg repository "$GITHUB_REPOSITORY" \
|
|
--arg branch "$GITHUB_REF_NAME" \
|
|
--arg sha "$GITHUB_SHA" \
|
|
'any(.[];
|
|
.merged_at != null and
|
|
.base.repo.full_name == $repository and
|
|
.base.ref == $branch and
|
|
.merge_commit_sha == $sha)' \
|
|
<<< "$pull_requests" >/dev/null; then
|
|
echo "Direct push: HAR built without publishing."
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
mkdir -p "$HOME/.ohpm"
|
|
umask 077
|
|
printf '%s' "$CODEARTS_PRIVATE_OHPM" > "$HOME/.ohpm/.ohpmrc"
|
|
trap 'rm -f "$HOME/.ohpm/.ohpmrc"' EXIT
|
|
ohpm publish "$EASYTIER_PACKAGE_NAME.har"
|
|
|
|
payload=$(jq -nc \
|
|
--arg repository "$GITHUB_REPOSITORY" \
|
|
--arg ref "refs/heads/$GITHUB_REF_NAME" \
|
|
--arg package "$EASYTIER_PACKAGE_NAME" \
|
|
'{
|
|
event_type: "core-har-published",
|
|
client_payload: {
|
|
core_repository: $repository,
|
|
core_ref: $ref,
|
|
package_name: $package
|
|
}
|
|
}')
|
|
for repository in \
|
|
FrankHan052176/EasyTier-ArkTS \
|
|
FrankHan052176/easytier-pro-app; do
|
|
curl --fail-with-body --silent --show-error \
|
|
-X POST \
|
|
-H "Accept: application/vnd.github+json" \
|
|
-H "Authorization: Bearer $DOWNSTREAM_DISPATCH_TOKEN" \
|
|
-H "X-GitHub-Api-Version: 2022-11-28" \
|
|
"$GITHUB_API_URL/repos/$repository/dispatches" \
|
|
--data "$payload"
|
|
done
|