Fork of Pleroma with site-specific changes and feature branches https://git.pleroma.social/pleroma/pleroma
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

428 lines
13KB

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