stages: - build - deploy variables: GRADLE_OPTS: "-Dorg.gradle.daemon=false -Dorg.gradle.jvmargs='-Xmx1536m' -Dorg.gradle.parallel=true" GRADLE_USER_HOME: "${CI_PROJECT_DIR}/.gradle" PUB_CACHE: "${CI_PROJECT_DIR}/.pub-cache" cache: key: ${CI_COMMIT_REF_SLUG} paths: - .gradle/ - .pub-cache/ - android/.gradle/ - build/ build:apk: stage: build image: ghcr.io/cirruslabs/flutter:stable script: - flutter pub get - flutter build apk --release --no-shrink artifacts: paths: - build/app/outputs/flutter-apk/*.apk expire_in: 30 days rules: - if: $CI_COMMIT_BRANCH =~ /^dev|main|feature\// - if: $CI_COMMIT_TAG allow_failure: false deploy:release: stage: deploy image: alpine:latest needs: - build:apk before_script: - apk add --no-cache curl jq script: - | # Версия релиза VERSION="${CI_COMMIT_TAG:-v0.0.${CI_PIPELINE_ID}}" APK_FILE=$(ls build/app/outputs/flutter-apk/*.apk | head -n1) if [ -z "$APK_FILE" ]; then echo "No APK found!" exit 1 fi # Создаем описание релиза DESCRIPTION="NeoMovies Mobile ${VERSION} Commit: ${CI_COMMIT_SHORT_SHA} Branch: ${CI_COMMIT_BRANCH} Pipeline: [#${CI_PIPELINE_ID}](${CI_PIPELINE_URL}) APK: \`$(basename $APK_FILE)\`" # Создаем релиз через GitLab API curl -s --fail -X POST "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/releases" \ --header "PRIVATE-TOKEN: ${CI_JOB_TOKEN}" \ --header "Content-Type: application/json" \ --data "{\"name\":\"NeoMovies ${VERSION}\",\"tag_name\":\"${VERSION}\",\"description\":\"${DESCRIPTION}\",\"ref\":\"${CI_COMMIT_SHA}\"}" || \ curl -s -X PUT "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/releases/${VERSION}" \ --header "PRIVATE-TOKEN: ${CI_JOB_TOKEN}" \ --header "Content-Type: application/json" \ --data "{\"name\":\"NeoMovies ${VERSION}\",\"tag_name\":\"${VERSION}\",\"description\":\"${DESCRIPTION}\",\"ref\":\"${CI_COMMIT_SHA}\"}" echo "Release created: ${CI_PROJECT_URL}/-/releases/${VERSION}" echo "APK artifact: ${CI_JOB_URL}/artifacts/browse" artifacts: paths: - build/app/outputs/flutter-apk/*.apk expire_in: 30 days rules: - if: $CI_COMMIT_TAG when: always - if: $CI_COMMIT_BRANCH =~ /^dev|main/ when: on_success