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 =~ /feat_[a-zA-Z]+/ - if: $CI_COMMIT_BRANCH == "canary_release" - if: $CI_COMMIT_TAG =~ /^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 =~ /feat_[a-zA-Z]+/ .generate_tag_rule: tags: - macos - flutter rules: - if: $CI_COMMIT_BRANCH == "master" .generate_next_version_rule: tags: - macos - flutter rules: - if: $CI_COMMIT_BRANCH == "develop" - if: $CI_COMMIT_BRANCH == "release" - 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: - ls -li - export NEXT_VERSION="$(cat app_new.version)" # - flutter pub get - bundle install --gemfile android/Gemfile --quiet cache: paths: - app_new.version .setup_fastlane_ios: extends: .build_rule before_script: - ls -li - export NEXT_VERSION="$(cat app_new.version)" # - flutter pub get - bundle install --gemfile ios/Gemfile --quiet 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: bash android/build.sh artifacts: paths: - build/app/outputs/flutter-apk/ build_ios: stage: build-artifacts extends: .setup_fastlane_ios script: - 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-release-${CI_COMMIT_TAG}.aab "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/StarLock/${StarLock_VERSION}/starlock-xhj-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