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.

443 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. only:
  147. changes:
  148. - "**/*.ex"
  149. - "**/*.exs"
  150. - "mix.lock"
  151. cache: {}
  152. script:
  153. - mix deps.get
  154. - mix compile
  155. - mix xref graph --format cycles --label compile | awk '{print $0} END{exit ($0 != "No cycles found")}'
  156. docs-deploy:
  157. stage: deploy
  158. cache: *testing_cache_policy
  159. image: alpine:latest
  160. only:
  161. - stable@pleroma/pleroma
  162. - develop@pleroma/pleroma
  163. before_script:
  164. - apk add curl
  165. script:
  166. - 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
  167. review_app:
  168. image: alpine:3.9
  169. stage: deploy
  170. before_script:
  171. - apk update && apk add openssh-client git
  172. when: manual
  173. environment:
  174. name: review/$CI_COMMIT_REF_NAME
  175. url: https://$CI_ENVIRONMENT_SLUG.pleroma.online/
  176. on_stop: stop_review_app
  177. only:
  178. - branches
  179. except:
  180. - master
  181. - develop
  182. script:
  183. - echo "$CI_ENVIRONMENT_SLUG"
  184. - mkdir -p ~/.ssh
  185. - eval $(ssh-agent -s)
  186. - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
  187. - ssh-keyscan -H "pleroma.online" >> ~/.ssh/known_hosts
  188. - (ssh -t dokku@pleroma.online -- apps:create "$CI_ENVIRONMENT_SLUG") || true
  189. - (ssh -t dokku@pleroma.online -- git:set "$CI_ENVIRONMENT_SLUG" keep-git-dir true) || true
  190. - 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
  191. - (ssh -t dokku@pleroma.online -- postgres:create $(echo $CI_ENVIRONMENT_SLUG | sed -e 's/-/_/g')_db) || true
  192. - (ssh -t dokku@pleroma.online -- postgres:link $(echo $CI_ENVIRONMENT_SLUG | sed -e 's/-/_/g')_db "$CI_ENVIRONMENT_SLUG") || true
  193. - (ssh -t dokku@pleroma.online -- certs:add "$CI_ENVIRONMENT_SLUG" /home/dokku/server.crt /home/dokku/server.key) || true
  194. - git push -f dokku@pleroma.online:$CI_ENVIRONMENT_SLUG $CI_COMMIT_SHA:refs/heads/master
  195. spec-deploy:
  196. stage: deploy
  197. artifacts:
  198. paths:
  199. - spec.json
  200. only:
  201. - develop@pleroma/pleroma
  202. image: alpine:latest
  203. before_script:
  204. - apk add curl
  205. script:
  206. - 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
  207. stop_review_app:
  208. image: alpine:3.9
  209. stage: deploy
  210. before_script:
  211. - apk update && apk add openssh-client git
  212. when: manual
  213. environment:
  214. name: review/$CI_COMMIT_REF_NAME
  215. action: stop
  216. script:
  217. - echo "$CI_ENVIRONMENT_SLUG"
  218. - mkdir -p ~/.ssh
  219. - eval $(ssh-agent -s)
  220. - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
  221. - ssh-keyscan -H "pleroma.online" >> ~/.ssh/known_hosts
  222. - ssh -t dokku@pleroma.online -- --force apps:destroy "$CI_ENVIRONMENT_SLUG"
  223. - ssh -t dokku@pleroma.online -- --force postgres:destroy $(echo $CI_ENVIRONMENT_SLUG | sed -e 's/-/_/g')_db
  224. amd64:
  225. stage: release
  226. image: elixir:1.10.3
  227. only: &release-only
  228. - stable@pleroma/pleroma
  229. - develop@pleroma/pleroma
  230. - /^maint/.*$/@pleroma/pleroma
  231. - /^release/.*$/@pleroma/pleroma
  232. artifacts: &release-artifacts
  233. name: "pleroma-$CI_COMMIT_REF_NAME-$CI_COMMIT_SHORT_SHA-$CI_JOB_NAME"
  234. paths:
  235. - release/*
  236. # Ideally it would be never for master branch and with the next commit for develop,
  237. # but Gitlab does not support neither `only` for artifacts
  238. # nor setting it to never from .gitlab-ci.yml
  239. # nor expiring with the next commit
  240. expire_in: 42 yrs
  241. cache: &release-cache
  242. key: $CI_COMMIT_REF_NAME-$CI_JOB_NAME
  243. paths:
  244. - deps
  245. variables: &release-variables
  246. MIX_ENV: prod
  247. before_script: &before-release
  248. - apt-get update && apt-get install -y cmake libmagic-dev
  249. - echo "import Mix.Config" > config/prod.secret.exs
  250. - mix local.hex --force
  251. - mix local.rebar --force
  252. script: &release
  253. - mix deps.get --only prod
  254. - mkdir release
  255. - export PLEROMA_BUILD_BRANCH=$CI_COMMIT_REF_NAME
  256. - mix release --path release
  257. amd64-musl:
  258. stage: release
  259. artifacts: *release-artifacts
  260. only: *release-only
  261. image: elixir:1.10.3-alpine
  262. cache: *release-cache
  263. variables: *release-variables
  264. before_script: &before-release-musl
  265. - apk add git gcc g++ musl-dev make cmake file-dev
  266. - echo "import Mix.Config" > config/prod.secret.exs
  267. - mix local.hex --force
  268. - mix local.rebar --force
  269. script: *release
  270. arm:
  271. stage: release
  272. artifacts: *release-artifacts
  273. only: *release-only
  274. tags:
  275. - arm32-specified
  276. image: arm32v7/elixir:1.10.3
  277. cache: *release-cache
  278. variables: *release-variables
  279. before_script: *before-release
  280. script: *release
  281. arm-musl:
  282. stage: release
  283. artifacts: *release-artifacts
  284. only: *release-only
  285. tags:
  286. - arm32-specified
  287. image: arm32v7/elixir:1.10.3-alpine
  288. cache: *release-cache
  289. variables: *release-variables
  290. before_script: *before-release-musl
  291. script: *release
  292. arm64:
  293. stage: release
  294. artifacts: *release-artifacts
  295. only: *release-only
  296. tags:
  297. - arm
  298. image: arm64v8/elixir:1.10.3
  299. cache: *release-cache
  300. variables: *release-variables
  301. before_script: *before-release
  302. script: *release
  303. arm64-musl:
  304. stage: release
  305. artifacts: *release-artifacts
  306. only: *release-only
  307. tags:
  308. - arm
  309. image: arm64v8/elixir:1.10.3-alpine
  310. cache: *release-cache
  311. variables: *release-variables
  312. before_script: *before-release-musl
  313. script: *release
  314. docker:
  315. stage: docker
  316. image: docker:latest
  317. cache: {}
  318. dependencies: []
  319. variables: &docker-variables
  320. DOCKER_DRIVER: overlay2
  321. DOCKER_HOST: unix:///var/run/docker.sock
  322. IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
  323. IMAGE_TAG_SLUG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
  324. IMAGE_TAG_LATEST: $CI_REGISTRY_IMAGE:latest
  325. IMAGE_TAG_LATEST_STABLE: $CI_REGISTRY_IMAGE:latest-stable
  326. DOCKER_BUILDX_URL: https://github.com/docker/buildx/releases/download/v0.4.1/buildx-v0.4.1.linux-amd64
  327. DOCKER_BUILDX_HASH: 71a7d01439aa8c165a25b59c44d3f016fddbd98b
  328. before_script: &before-docker
  329. - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  330. - docker pull $IMAGE_TAG_SLUG || true
  331. - export CI_JOB_TIMESTAMP=$(date --utc -Iseconds)
  332. - export CI_VCS_REF=$CI_COMMIT_SHORT_SHA
  333. allow_failure: true
  334. script:
  335. - mkdir -p /root/.docker/cli-plugins
  336. - wget "${DOCKER_BUILDX_URL}" -O ~/.docker/cli-plugins/docker-buildx
  337. - echo "${DOCKER_BUILDX_HASH} /root/.docker/cli-plugins/docker-buildx" | sha1sum -c
  338. - chmod +x ~/.docker/cli-plugins/docker-buildx
  339. - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
  340. - docker buildx create --name mbuilder --driver docker-container --use
  341. - docker buildx inspect --bootstrap
  342. - 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 .
  343. tags:
  344. - dind
  345. only:
  346. - develop@pleroma/pleroma
  347. docker-stable:
  348. stage: docker
  349. image: docker:latest
  350. cache: {}
  351. dependencies: []
  352. variables: *docker-variables
  353. before_script: *before-docker
  354. allow_failure: true
  355. script:
  356. - mkdir -p /root/.docker/cli-plugins
  357. - wget "${DOCKER_BUILDX_URL}" -O ~/.docker/cli-plugins/docker-buildx
  358. - echo "${DOCKER_BUILDX_HASH} /root/.docker/cli-plugins/docker-buildx" | sha1sum -c
  359. - chmod +x ~/.docker/cli-plugins/docker-buildx
  360. - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
  361. - docker buildx create --name mbuilder --driver docker-container --use
  362. - docker buildx inspect --bootstrap
  363. - 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 .
  364. tags:
  365. - dind
  366. only:
  367. - stable@pleroma/pleroma
  368. docker-release:
  369. stage: docker
  370. image: docker:latest
  371. cache: {}
  372. dependencies: []
  373. variables: *docker-variables
  374. before_script: *before-docker
  375. allow_failure: true
  376. script:
  377. script:
  378. - mkdir -p /root/.docker/cli-plugins
  379. - wget "${DOCKER_BUILDX_URL}" -O ~/.docker/cli-plugins/docker-buildx
  380. - echo "${DOCKER_BUILDX_HASH} /root/.docker/cli-plugins/docker-buildx" | sha1sum -c
  381. - chmod +x ~/.docker/cli-plugins/docker-buildx
  382. - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
  383. - docker buildx create --name mbuilder --driver docker-container --use
  384. - docker buildx inspect --bootstrap
  385. - 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 .
  386. tags:
  387. - dind
  388. only:
  389. - /^release/.*$/@pleroma/pleroma
  390. docker-adhoc:
  391. stage: docker
  392. image: docker:latest
  393. cache: {}
  394. dependencies: []
  395. variables: *docker-variables
  396. before_script: *before-docker
  397. allow_failure: true
  398. script:
  399. script:
  400. - mkdir -p /root/.docker/cli-plugins
  401. - wget "${DOCKER_BUILDX_URL}" -O ~/.docker/cli-plugins/docker-buildx
  402. - echo "${DOCKER_BUILDX_HASH} /root/.docker/cli-plugins/docker-buildx" | sha1sum -c
  403. - chmod +x ~/.docker/cli-plugins/docker-buildx
  404. - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
  405. - docker buildx create --name mbuilder --driver docker-container --use
  406. - docker buildx inspect --bootstrap
  407. - 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 .
  408. tags:
  409. - dind
  410. only:
  411. - /^build-docker/.*$/@pleroma/pleroma