summaryrefslogtreecommitdiffstats
path: root/.gitlab-ci.yml
blob: 510801847c958d7cfab9dafc6c7a2425471cbfbf (plain)
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
image: hatsoftwares/mastalab-ci:latest

before_script:
  - export ANDROID_HOME=/opt/android-sdk-linux
  - export PATH=$PATH:/opt/android-sdk-linux/platform-tools/
  - chmod +x gradlew

stages:
  - build-and-test
  - tag
  - toot

.no-upload: &no-upload
  stage: build-and-test
  retry: 2


assembleDebug:
  <<: *no-upload
  cache:
    key: "${CI_COMMIT_TAG}"
    paths:
      - app/build/outputs/apk/fdroid/debug/app-fdroid-debug.apk
      - app/build/outputs/apk/playstore/debug/app-playstore-debug.apk
    policy: push
  script:
    - ./gradlew assembleDebug

lintDebug:
  <<: *no-upload
  script:
    - ./gradlew -Pci --console=plain :app:lintFdroidDebug -PbuildDir=lint
  except:
    - tags

debugTests:
  <<: *no-upload
  script:
    - ./gradlew -Pci --console=plain :app:testFdroidDebugUnitTest
  except:
    - tags


## PROTECTED VARIABLES TO SET IN GITLAB:
# - GITLAB_API_TOKEN: token you create on Gitlab
# - NC_REMOTE_DIR:    like https://YOUR_NEXTCLOUD/remote.php/dav/files/YOUR_USER/mastalab (no trailing slash)
# - NC_SHARE_URL:     share the folder in Nextcloud with public link and put your public link here (no trailing slash)
# - NC_USER:          nextcloud user
# - NC_PASSWORD:      nextcloud password
## Protect all tags in Gitlab repo settings (do a wildcard, ie '*')
# For now, it uses the assembleDebug builds, you'll need to create a job in build-and-test to create the apks, with only: - tags and add except: - tags to assembleDebug (like in debugTests)
# In it, put something like this to get your signature key file:
# - curl -s --output signature.jsk -u "${NC_USER}:${NC_PASSWORD}" "https://YOUR_NEXTCLOUD/remote.php/dav/files/YOUR_USER/signature.jsk"
putApkOnTags:
  image: hatsoftwares/curl-jq:latest
  stage: tag
  retry: 2
  cache:
    key: "${CI_COMMIT_TAG}"
    paths:
      - app/build/outputs/apk/fdroid/debug/app-fdroid-debug.apk
      - app/build/outputs/apk/playstore/debug/app-playstore-debug.apk
    policy: pull
  script:
    - export PROJECT_API_URL="https://framagit.org/api/v4/projects/${CI_PROJECT_ID}"
    - export DESCRIPTION_URL="${PROJECT_API_URL}/repository/tags/${CI_COMMIT_TAG}"
    - export RELEASE_URL="${DESCRIPTION_URL}/release"
    - export NC_UPLOAD_URL="${NC_REMOTE_DIR}/${CI_COMMIT_TAG}"
    - export NC_DOWNLOAD_URL="${NC_SHARE_URL}/download?path=%2F${CI_COMMIT_TAG}%2F&files="
    - 'export HEADER="Private-Token: ${GITLAB_API_TOKEN}"'
    - export fdroidUrl="${NC_DOWNLOAD_URL}app-fdroid-debug.apk"
    - export playstoreUrl="${NC_DOWNLOAD_URL}app-playstore-debug.apk"
    - 'curl -s -u "${NC_USER}:${NC_PASSWORD}" -X MKCOL "${NC_UPLOAD_URL}"'
    - 'curl -s -u "${NC_USER}:${NC_PASSWORD}" -T app/build/outputs/apk/fdroid/debug/app-fdroid-debug.apk       "${NC_UPLOAD_URL}/app-fdroid-debug.apk"'
    - 'curl -s -u "${NC_USER}:${NC_PASSWORD}" -T app/build/outputs/apk/playstore/debug/app-playstore-debug.apk "${NC_UPLOAD_URL}/app-playstore-debug.apk"'
    - export description=$(curl -s --header "${HEADER}" "${DESCRIPTION_URL}" | jq .release.description | sed -e 's@"@@g')
    - if [[ $description == 'null' ]]; then export METHOD="POST"; echo -e "[Get the fdroid apk](${fdroidUrl})\n\n[Get the play store apk](${playstoreUrl})" > /tmp/text; fi
    - if [[ $description != 'null' ]]; then export METHOD="PUT";  echo -e "${description}\n\n[Get the fdroid apk](${fdroidUrl})\n\n[Get the play store apk](${playstoreUrl})" > /tmp/text; fi
    - curl -s --request $METHOD --data-urlencode "description@/tmp/text" --header "${HEADER}" "${RELEASE_URL}"
  only:
    - tags

pouet-it:
  image: hatsoftwares/pouet-it-from-ci:latest
  stage: toot
  dependencies:
    - putApkOnTags
  script:
    - cd /opt/pouet-it-from-ci
    # Make the project name first letter uppercase
    - export NC_DOWNLOAD_URL="${NC_SHARE_URL}?path=%2F${CI_COMMIT_TAG}%2F"
    - export project="$(tr '[:lower:]' '[:upper:]' <<< ${CI_PROJECT_NAME:0:1})${CI_PROJECT_NAME:1}"
    - export MESSAGE=$(echo -e "I just released a new version of "'#'"${APP_NAME}!""\n${CI_PROJECT_URL}/tags/${CI_COMMIT_TAG}\nYou can download the apks on ${NC_DOWNLOAD_URL}")
    - if [[ ! -z $HOST ]]; then carton exec ./pouet-it-from-ci.pl; fi
  only:
    - tags