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.

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