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.

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