Fork of Pleroma with site-specific changes and feature branches https://git.pleroma.social/pleroma/pleroma
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

354 Zeilen
11KB

  1. image: elixir:1.9.4
  2. variables: &global_variables
  3. POSTGRES_DB: pleroma_test
  4. POSTGRES_USER: postgres
  5. POSTGRES_PASSWORD: postgres
  6. DB_HOST: postgres
  7. MIX_ENV: test
  8. cache: &global_cache_policy
  9. key: ${CI_COMMIT_REF_SLUG}
  10. paths:
  11. - deps
  12. - _build
  13. stages:
  14. - build
  15. - test
  16. - benchmark
  17. - deploy
  18. - release
  19. - docker
  20. before_script:
  21. - apt-get update && apt-get install -y cmake
  22. - mix local.hex --force
  23. - mix local.rebar --force
  24. - apt-get -qq update
  25. - apt-get install -y libmagic-dev
  26. build:
  27. stage: build
  28. script:
  29. - mix deps.get
  30. - mix compile --force
  31. benchmark:
  32. stage: benchmark
  33. when: manual
  34. variables:
  35. MIX_ENV: benchmark
  36. services:
  37. - name: postgres:9.6
  38. alias: postgres
  39. command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
  40. script:
  41. - mix deps.get
  42. - mix ecto.create
  43. - mix ecto.migrate
  44. - mix pleroma.load_testing
  45. unit-testing:
  46. stage: test
  47. retry: 2
  48. cache: &testing_cache_policy
  49. <<: *global_cache_policy
  50. policy: pull
  51. services:
  52. - name: postgres:9.6
  53. alias: postgres
  54. command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
  55. script:
  56. - apt-get update && apt-get install -y libimage-exiftool-perl ffmpeg
  57. - mix deps.get
  58. - mix ecto.create
  59. - mix ecto.migrate
  60. - mix coveralls --preload-modules
  61. # Removed to fix CI issue. In this early state it wasn't adding much value anyway.
  62. # TODO Fix and reinstate federated testing
  63. # federated-testing:
  64. # stage: test
  65. # cache: *testing_cache_policy
  66. # services:
  67. # - name: minibikini/postgres-with-rum:12
  68. # alias: postgres
  69. # command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
  70. # script:
  71. # - mix deps.get
  72. # - mix ecto.create
  73. # - mix ecto.migrate
  74. # - epmd -daemon
  75. # - mix test --trace --only federated
  76. unit-testing-rum:
  77. stage: test
  78. retry: 2
  79. cache: *testing_cache_policy
  80. services:
  81. - name: minibikini/postgres-with-rum:12
  82. alias: postgres
  83. command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
  84. variables:
  85. <<: *global_variables
  86. RUM_ENABLED: "true"
  87. script:
  88. - apt-get update && apt-get install -y libimage-exiftool-perl ffmpeg
  89. - mix deps.get
  90. - mix ecto.create
  91. - mix ecto.migrate
  92. - "mix ecto.migrate --migrations-path priv/repo/optional_migrations/rum_indexing/"
  93. - mix test --preload-modules
  94. lint:
  95. stage: test
  96. cache: *testing_cache_policy
  97. script:
  98. - mix format --check-formatted
  99. analysis:
  100. stage: test
  101. cache: *testing_cache_policy
  102. script:
  103. - mix deps.get
  104. - mix credo --strict --only=warnings,todo,fixme,consistency,readability
  105. docs-deploy:
  106. stage: deploy
  107. cache: *testing_cache_policy
  108. image: alpine:latest
  109. only:
  110. - stable@pleroma/pleroma
  111. - develop@pleroma/pleroma
  112. before_script:
  113. - apk add curl
  114. script:
  115. - curl -X POST -F"token=$DOCS_PIPELINE_TRIGGER" -F'ref=master' -F"variables[BRANCH]=$CI_COMMIT_REF_NAME" https://git.pleroma.social/api/v4/projects/673/trigger/pipeline
  116. review_app:
  117. image: alpine:3.9
  118. stage: deploy
  119. before_script:
  120. - apk update && apk add openssh-client git
  121. when: manual
  122. environment:
  123. name: review/$CI_COMMIT_REF_NAME
  124. url: https://$CI_ENVIRONMENT_SLUG.pleroma.online/
  125. on_stop: stop_review_app
  126. only:
  127. - branches
  128. except:
  129. - master
  130. - develop
  131. script:
  132. - echo "$CI_ENVIRONMENT_SLUG"
  133. - mkdir -p ~/.ssh
  134. - eval $(ssh-agent -s)
  135. - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
  136. - ssh-keyscan -H "pleroma.online" >> ~/.ssh/known_hosts
  137. - (ssh -t dokku@pleroma.online -- apps:create "$CI_ENVIRONMENT_SLUG") || true
  138. - (ssh -t dokku@pleroma.online -- git:set "$CI_ENVIRONMENT_SLUG" keep-git-dir true) || true
  139. - ssh -t dokku@pleroma.online -- config:set "$CI_ENVIRONMENT_SLUG" APP_NAME="$CI_ENVIRONMENT_SLUG" APP_HOST="$CI_ENVIRONMENT_SLUG.pleroma.online" MIX_ENV=dokku
  140. - (ssh -t dokku@pleroma.online -- postgres:create $(echo $CI_ENVIRONMENT_SLUG | sed -e 's/-/_/g')_db) || true
  141. - (ssh -t dokku@pleroma.online -- postgres:link $(echo $CI_ENVIRONMENT_SLUG | sed -e 's/-/_/g')_db "$CI_ENVIRONMENT_SLUG") || true
  142. - (ssh -t dokku@pleroma.online -- certs:add "$CI_ENVIRONMENT_SLUG" /home/dokku/server.crt /home/dokku/server.key) || true
  143. - git push -f dokku@pleroma.online:$CI_ENVIRONMENT_SLUG $CI_COMMIT_SHA:refs/heads/master
  144. stop_review_app:
  145. image: alpine:3.9
  146. stage: deploy
  147. before_script:
  148. - apk update && apk add openssh-client git
  149. when: manual
  150. environment:
  151. name: review/$CI_COMMIT_REF_NAME
  152. action: stop
  153. script:
  154. - echo "$CI_ENVIRONMENT_SLUG"
  155. - mkdir -p ~/.ssh
  156. - eval $(ssh-agent -s)
  157. - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
  158. - ssh-keyscan -H "pleroma.online" >> ~/.ssh/known_hosts
  159. - ssh -t dokku@pleroma.online -- --force apps:destroy "$CI_ENVIRONMENT_SLUG"
  160. - ssh -t dokku@pleroma.online -- --force postgres:destroy $(echo $CI_ENVIRONMENT_SLUG | sed -e 's/-/_/g')_db
  161. amd64:
  162. stage: release
  163. image: elixir:1.10.3
  164. only: &release-only
  165. - stable@pleroma/pleroma
  166. - develop@pleroma/pleroma
  167. - /^maint/.*$/@pleroma/pleroma
  168. - /^release/.*$/@pleroma/pleroma
  169. - /^build-release/.*$/@pleroma/pleroma
  170. artifacts: &release-artifacts
  171. name: "pleroma-$CI_COMMIT_REF_NAME-$CI_COMMIT_SHORT_SHA-$CI_JOB_NAME"
  172. paths:
  173. - release/*
  174. # Ideally it would be never for master branch and with the next commit for develop,
  175. # but Gitlab does not support neither `only` for artifacts
  176. # nor setting it to never from .gitlab-ci.yml
  177. # nor expiring with the next commit
  178. expire_in: 42 yrs
  179. cache: &release-cache
  180. key: $CI_COMMIT_REF_NAME-$CI_JOB_NAME
  181. paths:
  182. - deps
  183. variables: &release-variables
  184. MIX_ENV: prod
  185. before_script: &before-release
  186. - apt-get update && apt-get install -y cmake libmagic-dev
  187. - echo "import Mix.Config" > config/prod.secret.exs
  188. - mix local.hex --force
  189. - mix local.rebar --force
  190. script: &release
  191. - mix deps.get --only prod
  192. - mkdir release
  193. - export PLEROMA_BUILD_BRANCH=$CI_COMMIT_REF_NAME
  194. - mix release --path release
  195. amd64-musl:
  196. stage: release
  197. artifacts: *release-artifacts
  198. only: *release-only
  199. image: elixir:1.10.3-alpine
  200. cache: *release-cache
  201. variables: *release-variables
  202. before_script: &before-release-musl
  203. - apk add git gcc g++ musl-dev make cmake file-dev
  204. - echo "import Mix.Config" > config/prod.secret.exs
  205. - mix local.hex --force
  206. - mix local.rebar --force
  207. script: *release
  208. arm:
  209. stage: release
  210. artifacts: *release-artifacts
  211. only: *release-only
  212. tags:
  213. - arm32
  214. image: elixir:1.10.3
  215. cache: *release-cache
  216. variables: *release-variables
  217. before_script: *before-release
  218. script: *release
  219. arm-musl:
  220. stage: release
  221. artifacts: *release-artifacts
  222. only: *release-only
  223. tags:
  224. - arm32
  225. image: elixir:1.10.3-alpine
  226. cache: *release-cache
  227. variables: *release-variables
  228. before_script: *before-release-musl
  229. script: *release
  230. arm64:
  231. stage: release
  232. artifacts: *release-artifacts
  233. only: *release-only
  234. tags:
  235. - arm
  236. image: elixir:1.10.3
  237. cache: *release-cache
  238. variables: *release-variables
  239. before_script: *before-release
  240. script: *release
  241. arm64-musl:
  242. stage: release
  243. artifacts: *release-artifacts
  244. only: *release-only
  245. tags:
  246. - arm
  247. # TODO: Replace with upstream image when 1.9.0 comes out
  248. image: elixir:1.10.3-alpine
  249. cache: *release-cache
  250. variables: *release-variables
  251. before_script: *before-release-musl
  252. script: *release
  253. docker:
  254. stage: docker
  255. image: docker:latest
  256. cache: {}
  257. dependencies: []
  258. variables: &docker-variables
  259. DOCKER_DRIVER: overlay2
  260. DOCKER_HOST: unix:///var/run/docker.sock
  261. IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
  262. IMAGE_TAG_SLUG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
  263. IMAGE_TAG_LATEST: $CI_REGISTRY_IMAGE:latest
  264. IMAGE_TAG_LATEST_STABLE: $CI_REGISTRY_IMAGE:latest-stable
  265. DOCKER_BUILDX_URL: https://github.com/docker/buildx/releases/download/v0.4.1/buildx-v0.4.1.linux-amd64
  266. DOCKER_BUILDX_HASH: 71a7d01439aa8c165a25b59c44d3f016fddbd98b
  267. before_script: &before-docker
  268. - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  269. - docker pull $IMAGE_TAG_SLUG || true
  270. - export CI_JOB_TIMESTAMP=$(date --utc -Iseconds)
  271. - export CI_VCS_REF=$CI_COMMIT_SHORT_SHA
  272. allow_failure: true
  273. script:
  274. - mkdir -p /root/.docker/cli-plugins
  275. - wget "${DOCKER_BUILDX_URL}" -O ~/.docker/cli-plugins/docker-buildx
  276. - echo "${DOCKER_BUILDX_HASH} /root/.docker/cli-plugins/docker-buildx" | sha1sum -c
  277. - chmod +x ~/.docker/cli-plugins/docker-buildx
  278. - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
  279. - docker buildx create --name mbuilder --driver docker-container --use
  280. - docker buildx inspect --bootstrap
  281. - docker buildx build --platform linux/amd64,linux/arm/v7,linux/arm64/v8 --push --cache-from $IMAGE_TAG_SLUG --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP -t $IMAGE_TAG -t $IMAGE_TAG_SLUG -t $IMAGE_TAG_LATEST .
  282. tags:
  283. - dind
  284. only:
  285. - develop@pleroma/pleroma
  286. docker-stable:
  287. stage: docker
  288. image: docker:latest
  289. cache: {}
  290. dependencies: []
  291. variables: *docker-variables
  292. before_script: *before-docker
  293. allow_failure: true
  294. script:
  295. - mkdir -p /root/.docker/cli-plugins
  296. - wget "${DOCKER_BUILDX_URL}" -O ~/.docker/cli-plugins/docker-buildx
  297. - echo "${DOCKER_BUILDX_HASH} /root/.docker/cli-plugins/docker-buildx" | sha1sum -c
  298. - chmod +x ~/.docker/cli-plugins/docker-buildx
  299. - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
  300. - docker buildx create --name mbuilder --driver docker-container --use
  301. - docker buildx inspect --bootstrap
  302. - docker buildx build --platform linux/amd64,linux/arm/v7,linux/arm64/v8 --push --cache-from $IMAGE_TAG_SLUG --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP -t $IMAGE_TAG -t $IMAGE_TAG_SLUG -t $IMAGE_TAG_LATEST_STABLE .
  303. tags:
  304. - dind
  305. only:
  306. - stable@pleroma/pleroma
  307. docker-release:
  308. stage: docker
  309. image: docker:latest
  310. cache: {}
  311. dependencies: []
  312. variables: *docker-variables
  313. before_script: *before-docker
  314. allow_failure: true
  315. script:
  316. script:
  317. - mkdir -p /root/.docker/cli-plugins
  318. - wget "${DOCKER_BUILDX_URL}" -O ~/.docker/cli-plugins/docker-buildx
  319. - echo "${DOCKER_BUILDX_HASH} /root/.docker/cli-plugins/docker-buildx" | sha1sum -c
  320. - chmod +x ~/.docker/cli-plugins/docker-buildx
  321. - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
  322. - docker buildx create --name mbuilder --driver docker-container --use
  323. - docker buildx inspect --bootstrap
  324. - docker buildx build --platform linux/amd64,linux/arm/v7,linux/arm64/v8 --push --cache-from $IMAGE_TAG_SLUG --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP -t $IMAGE_TAG -t $IMAGE_TAG_SLUG .
  325. tags:
  326. - dind
  327. only:
  328. - /^release/.*$/@pleroma/pleroma