274 lines
9.5 KiB
YAML
274 lines
9.5 KiB
YAML
stages:
|
||
- test
|
||
- generate_tag_or_version
|
||
- build-artifacts
|
||
- release-artifacts
|
||
- notification
|
||
- clean-up
|
||
|
||
variables:
|
||
LC_ALL: "en_US.UTF-8"
|
||
LANG: "en_US.UTF-8"
|
||
|
||
|
||
.build_rule:
|
||
tags:
|
||
- macos
|
||
- flutter
|
||
rules:
|
||
- if: $CI_COMMIT_BRANCH == "develop"
|
||
- if: $CI_COMMIT_BRANCH == "release"
|
||
- if: $CI_COMMIT_BRANCH == "release_sky"
|
||
- if: $CI_COMMIT_BRANCH =~ /feat_[a-zA-Z]+/
|
||
- if: $CI_COMMIT_BRANCH == "canary_release"
|
||
- if: $CI_COMMIT_TAG =~ /^(sky_)?v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z]+\.[0-9]+)?$/
|
||
|
||
.notify_rule:
|
||
tags:
|
||
- macos
|
||
- flutter
|
||
rules:
|
||
- if: $CI_COMMIT_BRANCH == "develop"
|
||
- if: $CI_COMMIT_BRANCH == "release"
|
||
- if: $CI_COMMIT_BRANCH == "release_sky"
|
||
- if: $CI_COMMIT_BRANCH =~ /feat_[a-zA-Z]+/
|
||
|
||
.generate_tag_rule:
|
||
tags:
|
||
- macos
|
||
- flutter
|
||
rules:
|
||
- if: $CI_COMMIT_BRANCH == "master"
|
||
- if: $CI_COMMIT_BRANCH == "master_sky"
|
||
|
||
.generate_next_version_rule:
|
||
tags:
|
||
- macos
|
||
- flutter
|
||
rules:
|
||
- if: $CI_COMMIT_BRANCH == "develop"
|
||
- if: $CI_COMMIT_BRANCH == "release"
|
||
- if: $CI_COMMIT_BRANCH == "release_sky"
|
||
- if: $CI_COMMIT_BRANCH == "canary_release"
|
||
- if: $CI_COMMIT_BRANCH =~ /feat_[a-zA-Z]+/
|
||
|
||
.print_env:
|
||
stage: test
|
||
extends: .build_rule
|
||
before_script:
|
||
- java --version
|
||
- printenv | while IFS='=' read -r key value; do echo "$key=$value"; done
|
||
after_script:
|
||
- echo "finished"
|
||
|
||
.setup_fastlane_android:
|
||
extends: .build_rule
|
||
before_script:
|
||
- rm -rf ~/.gem ~/.bundle vendor/bundle_android # 强烈建议每次清理,防止并发/缓存污染
|
||
- export PATH="$HOME/.rbenv/bin:$PATH"
|
||
- eval "$(rbenv init -)"
|
||
- rbenv global 2.7.8
|
||
- export PATH="$HOME/.rbenv/shims:$PATH"
|
||
- which ruby # 输出当前使用的ruby路径,便于调试
|
||
- ruby -v # 输出当前ruby版本,便于调试
|
||
- gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/ # 如在国外可移除此行
|
||
- bundle config mirror.https://rubygems.org https://mirrors.aliyun.com/rubygems/
|
||
- bundle -v || gem install bundler --source https://gems.ruby-china.com/
|
||
- ls -li
|
||
- export NEXT_VERSION="$(cat app_new.version)"
|
||
- bash scripts/bundle_install_and_auto_add.sh android/Gemfile vendor/bundle_android "bundle exec fastlane -v"
|
||
- gem pristine --all || true # 修复所有未编译的gem扩展
|
||
script:
|
||
# 输出调试信息,便于后续排查环境问题
|
||
- echo "=== DEBUG INFO (android) ==="
|
||
- which ruby
|
||
- ruby -v
|
||
- which gem
|
||
- gem -v
|
||
- echo $PATH
|
||
- env
|
||
- bash android/build.sh
|
||
cache:
|
||
paths:
|
||
- app_new.version
|
||
|
||
.setup_fastlane_ios:
|
||
extends: .build_rule
|
||
before_script:
|
||
- rm -rf ~/.gem ~/.bundle vendor/bundle_ios # 强烈建议每次清理,防止并发/缓存污染
|
||
- export PATH="$HOME/.rbenv/bin:$PATH"
|
||
- eval "$(rbenv init -)"
|
||
- rbenv global 2.7.8
|
||
- export PATH="$HOME/.rbenv/shims:$PATH"
|
||
- which ruby # 输出当前使用的ruby路径,便于调试
|
||
- ruby -v # 输出当前ruby版本,便于调试
|
||
- gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/ # 如在国外可移除此行
|
||
- bundle config mirror.https://rubygems.org https://gems.ruby-china.com
|
||
- bundle -v || gem install bundler --source https://gems.ruby-china.com/
|
||
- ls -li
|
||
- export NEXT_VERSION="$(cat app_new.version)"
|
||
- bash scripts/bundle_install_and_auto_add.sh ios/Gemfile vendor/bundle_ios "bundle exec fastlane -v"
|
||
- gem pristine --all || true # 修复所有未编译的gem扩展
|
||
script:
|
||
# 输出调试信息,便于后续排查环境问题
|
||
- echo "=== DEBUG INFO (ios) ==="
|
||
- which ruby
|
||
- ruby -v
|
||
- which gem
|
||
- gem -v
|
||
- echo $PATH
|
||
- env
|
||
- bash ios/build.sh
|
||
cache:
|
||
paths:
|
||
- app_new.version
|
||
|
||
test_lint_check:
|
||
stage: test
|
||
extends: .print_env
|
||
script:
|
||
- echo "run lint check or per-test here"
|
||
tags:
|
||
- macos
|
||
- flutter
|
||
|
||
generate_git_tag:
|
||
stage: generate_tag_or_version
|
||
extends: .generate_tag_rule
|
||
before_script:
|
||
- bash pre_build.sh xhj
|
||
- bash pre_build.sh sky
|
||
- project_url=$(echo $CI_PROJECT_URL | sed 's/http:\/\///')
|
||
- echo "project_url:$project_url"
|
||
- echo "CI_SERVER_FQDN:$CI_SERVER_FQDN/CI_PROJECT_ROOT_NAMESPACE:$CI_PROJECT_ROOT_NAMESPACE/CI_PROJECT_NAME:$CI_PROJECT_NAME"
|
||
- git remote set-url origin git@$CI_SERVER_FQDN:$CI_PROJECT_ROOT_NAMESPACE/$CI_PROJECT_NAME.git
|
||
script:
|
||
- bash tag_generator.sh generate_tag
|
||
|
||
generate_next_version:
|
||
stage: generate_tag_or_version
|
||
extends: .generate_next_version_rule
|
||
script:
|
||
- bash tag_generator.sh generate_version
|
||
cache:
|
||
paths:
|
||
- app_new.version
|
||
|
||
build_android:
|
||
stage: build-artifacts
|
||
extends: .setup_fastlane_android
|
||
script:
|
||
- echo "=== DEBUG INFO (android) ==="
|
||
- which ruby
|
||
- ruby -v
|
||
- which gem
|
||
- gem -v
|
||
- echo $PATH
|
||
- env
|
||
- bash android/build.sh
|
||
artifacts:
|
||
paths:
|
||
- build/app/outputs/flutter-apk/
|
||
|
||
build_ios:
|
||
stage: build-artifacts
|
||
extends: .setup_fastlane_ios
|
||
script:
|
||
- echo "=== DEBUG INFO (ios) ==="
|
||
- which ruby
|
||
- ruby -v
|
||
- which gem
|
||
- gem -v
|
||
- echo $PATH
|
||
- env
|
||
- bash ios/build.sh
|
||
artifacts:
|
||
paths:
|
||
- build/app/outputs/flutter-ipa
|
||
|
||
create-release:
|
||
stage: release-artifacts
|
||
extends: .build_rule
|
||
dependencies:
|
||
- build_android
|
||
- build_ios
|
||
needs:
|
||
- job: build_android
|
||
artifacts: true
|
||
- job: build_ios
|
||
artifacts: true
|
||
rules:
|
||
- if: $CI_COMMIT_TAG
|
||
before_script:
|
||
- echo "start create release"
|
||
- bash release_description_generator.sh
|
||
- export RELEASE_DESCRIPTION="$(cat changelog.md)"
|
||
- echo "${RELEASE_DESCRIPTION}"
|
||
script:
|
||
- export StarLock_VERSION=${CI_COMMIT_TAG#*-}
|
||
- echo "Uploading StarLock-${StarLock_VERSION} packages to
|
||
${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/StarLock-${StarLock_VERSION}-*"
|
||
- 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-apk/starlock-xhj-release-${CI_COMMIT_TAG}.apk
|
||
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-xhj-release-${CI_COMMIT_TAG}.apk"'
|
||
- 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-apk/starlock-xhj_bundle-release-${CI_COMMIT_TAG}.aab
|
||
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-xhj_bundle-release-${CI_COMMIT_TAG}.aab"'
|
||
- 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-apk/starlock-sky-release-${CI_COMMIT_TAG}.apk
|
||
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-sky-release-${CI_COMMIT_TAG}.apk"'
|
||
- 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-apk/starlock-sky-release-${CI_COMMIT_TAG}.aab
|
||
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-sky-release-${CI_COMMIT_TAG}.aab"'
|
||
- 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-ipa/starlock-xhj-release-${CI_COMMIT_TAG}.ipa
|
||
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-xhj-release-${CI_COMMIT_TAG}.ipa"'
|
||
- 'curl -i --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file build/app/outputs/flutter-ipa/starlock-sky-release-${CI_COMMIT_TAG}.ipa
|
||
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-sky-release-${CI_COMMIT_TAG}.ipa"'
|
||
release:
|
||
name: '$CI_COMMIT_TAG'
|
||
description: '$(cat changelog.md)'
|
||
tag_name: '$CI_COMMIT_TAG'
|
||
ref: '$CI_COMMIT_TAG'
|
||
assets:
|
||
links:
|
||
- name: 'xhj apk binary package'
|
||
url: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${CI_COMMIT_TAG}/starlock-xhj-release-${CI_COMMIT_TAG}.apk'
|
||
link_type: 'package'
|
||
- name: 'xhj bundle binary package'
|
||
url: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${CI_COMMIT_TAG}/starlock-xhj_bundle-release-${CI_COMMIT_TAG}.aab'
|
||
link_type: 'package'
|
||
- name: 'sky apk binary package'
|
||
url: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${CI_COMMIT_TAG}/starlock-sky-release-${CI_COMMIT_TAG}.apk'
|
||
link_type: 'package'
|
||
- name: 'sky bundle binary package'
|
||
url: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${CI_COMMIT_TAG}/starlock-sky-release-${CI_COMMIT_TAG}.aab'
|
||
link_type: 'package'
|
||
- name: 'xhj ipa binary package'
|
||
url: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${CI_COMMIT_TAG}/starlock-xhj-release-${CI_COMMIT_TAG}.ipa'
|
||
link_type: 'package'
|
||
- name: 'sky ipa binary package'
|
||
url: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${CI_COMMIT_TAG}/starlock-sky-release-${CI_COMMIT_TAG}.ipa'
|
||
link_type: 'package'
|
||
|
||
notify_success:
|
||
stage: notification
|
||
extends: .notify_rule
|
||
before_script:
|
||
- printenv | while IFS='=' read -r key value; do echo "$key=$value"; done
|
||
script:
|
||
- bash notify.sh success
|
||
allow_failure: true
|
||
when: on_success
|
||
|
||
notify_failure:
|
||
stage: notification
|
||
extends: .notify_rule
|
||
before_script:
|
||
- printenv | while IFS='=' read -r key value; do echo "$key=$value"; done
|
||
script:
|
||
- bash notify.sh failure
|
||
allow_failure: true
|
||
when: on_failure
|
||
|
||
clean_up:
|
||
stage: clean-up
|
||
extends: .build_rule
|
||
script:
|
||
- git reset --hard
|
||
when: always |