-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.gitlab-ci.yml
169 lines (156 loc) · 5.22 KB
/
.gitlab-ci.yml
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
image: cirrusci/flutter:stable
stages:
- analyze
- build
- test
- deploy
build_linux:
stage: build
before_script:
- sudo apt update && sudo apt install curl clang cmake ninja-build pkg-config libgtk-3-dev
libblkid-dev liblzma-dev libsecret-1-dev libjsoncpp-dev libwebkit2gtk-4.1-dev patchelf libmpv-dev -y
script:
- flutter config --enable-linux-desktop
- flutter clean
- flutter pub get
- flutter packages pub run build_runner build --delete-conflicting-outputs
- flutter build linux --release
# https://github.com/flutter-webrtc/flutter-webrtc/issues/1174#issuecomment-1372911821
- patchelf build/linux/x64/release/bundle/lib/libflutter_webrtc_plugin.so --set-rpath "\$ORIGIN"
artifacts:
when: on_success
paths:
- build/linux/x64/release/bundle/
tags:
- minestrix
#build_android_bundle:
# stage: build
# script:
# - echo $KEYSTORE_FILE | base64 -d > android/app/keystore.jks
# - echo $KEYSTORE_PROPERTIES | base64 -d > android/key.properties
# - flutter clean
# - flutter pub get
# - flutter packages pub run build_runner build --delete-conflicting-outputs
# - flutter build appbundle --release
# artifacts:
# when: on_success
# paths:
# - build/app/outputs/bundle/release/app-release.aab
# tags:
# - minestrix
build_android_apk:
stage: build
script:
- echo $KEYSTORE_FILE | base64 -d > android/app/keystore.jks
- echo $KEYSTORE_PROPERTIES | base64 -d > android/key.properties
- flutter clean
- flutter pub get
- flutter packages pub run build_runner build --delete-conflicting-outputs
- flutter build apk --release
artifacts:
when: on_success
paths:
- build/app/outputs/flutter-apk/app-release.apk
tags:
- minestrix
build_web:
stage: build
script:
- flutter clean
- flutter pub get
- flutter packages pub run build_runner build --delete-conflicting-outputs
- flutter build web --release
artifacts:
when: on_success
paths:
- build/web/
tags:
- minestrix
deploy_web:
image: debian:buster
stage: deploy
before_script:
- which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )
- which rsync || ( apt-get update -y && apt-get install rsync -y )
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | base64 -d | tr -d '\r' | ssh-add - > /dev/null
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- ssh-keyscan -t rsa $HOST >> ~/.ssh/known_hosts
script:
- rsync -az build/web/ $USER@$HOST:app --delete
only:
- main
tags:
- minestrix
deploy_android_fdroid:
image: debian:buster
stage: deploy
before_script:
- which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )
- which rsync || ( apt-get update -y && apt-get install rsync -y )
- which pcregrep || ( apt-get update -y && apt-get install pcregrep -y )
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | base64 -d | tr -d '\r' | ssh-add - > /dev/null
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- ssh-keyscan -t rsa $HOST >> ~/.ssh/known_hosts
script:
- cd build/app/outputs/flutter-apk/
- export UPDATE_VERSION=$(pcregrep -o1 'version:\s([0-9]*\.[0-9]*\.[0-9]*)\+[0-9]*'
../../../../pubspec.yaml) && mv app-release.apk "fr.henri2h.minestrix_${UPDATE_VERSION}.apk"
- rsync -raz ./ $USER@$HOST:fdroid/repo
- ssh $USER@$HOST -t '/bin/bash -i -l -c "cd fdroid && fdroid update"'
only:
- main
tags:
- minestrix
analyze:
stage: analyze
script:
- flutter clean
- flutter pub get
- flutter packages pub run build_runner build
# - flutter analyze
- dart format lib/ --set-exit-if-changed
tags:
- minestrix
.release:
stage: deploy
image: curlimages/curl:latest
tags:
- minestrix
rules:
- if: '$CI_COMMIT_TAG =~ /^v\d+\.\d+\.\d+$/'
- if: '$CI_COMMIT_TAG =~ /^rc\d+\.\d+\.\d+-\d+$/'
before_script:
- export RELEASE_TYPE=$(echo $CI_COMMIT_TAG | grep -oE "[a-z]+")
- export RELEASE_VERSION=$(echo $CI_COMMIT_TAG | grep -oE "\d+\.\d+\.\d+")
- export PACKAGE_REGISTRY_URL="${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/minestrix/${RELEASE_VERSION}"
upload_android:
extends: .release
script:
- |
curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file build/android/app-release.apk ${PACKAGE_REGISTRY_URL}/minestrix.apk
upload_web:
extends: .release
script:
# workaround bug of Flutter engine
- tar czf package.tar.gz --ignore-failed-read -C build/web/ .
- |
curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file package.tar.gz ${PACKAGE_REGISTRY_URL}/minestrix-web.tar.gz
upload_linux_x86:
extends: .release
script:
- tar czf package.tar.gz -C build/linux/x64/release/bundle/ .
- |
curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file package.tar.gz ${PACKAGE_REGISTRY_URL}/minestrix-linux-x86.tar.gz
release:
extends: .release
image: registry.gitlab.com/gitlab-org/release-cli:latest
script:
- |
release-cli create --name "Release ${CI_COMMIT_TAG}" --tag-name $CI_COMMIT_TAG \
--assets-link "{\"name\":\"minestrix.apk\",\"url\":\"${PACKAGE_REGISTRY_URL}/minestrix.apk\"}" \
--assets-link "{\"name\":\"minestrix-linux-x86.tar.gz\",\"url\":\"${PACKAGE_REGISTRY_URL}/minestrix-linux-x86.tar.gz\"}" \
--assets-link "{\"name\":\"minestrix-web.tar.gz\",\"url\":\"${PACKAGE_REGISTRY_URL}/minestrix-web.tar.gz\"}"