logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

.gitlab-ci.yml (16468B)


  1. image: git.pleroma.social:5050/pleroma/pleroma/ci-base
  2. variables: &global_variables
  3. # Only used for the release
  4. ELIXIR_VER: 1.12.3
  5. POSTGRES_DB: pleroma_test
  6. POSTGRES_USER: postgres
  7. POSTGRES_PASSWORD: postgres
  8. DB_HOST: postgres
  9. DB_PORT: "5432"
  10. MIX_ENV: test
  11. workflow:
  12. rules:
  13. - if: $CI_PIPELINE_SOURCE == "merge_request_event"
  14. - if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS
  15. when: never
  16. - if: $CI_COMMIT_BRANCH
  17. cache: &global_cache_policy
  18. key:
  19. files:
  20. - mix.lock
  21. paths:
  22. - deps
  23. - _build
  24. stages:
  25. - check-changelog
  26. - build
  27. - lint
  28. - test
  29. - benchmark
  30. - deploy
  31. - release
  32. - docker
  33. - docker-combine
  34. before_script:
  35. - echo $MIX_ENV
  36. - rm -rf _build/*/lib/pleroma
  37. - mix deps.get
  38. after_script:
  39. - rm -rf _build/*/lib/pleroma
  40. check-changelog:
  41. stage: check-changelog
  42. image: alpine
  43. rules:
  44. - if: $CI_MERGE_REQUEST_SOURCE_PROJECT_PATH == 'pleroma/pleroma' && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == 'weblate-extract'
  45. when: never
  46. - if: $CI_MERGE_REQUEST_SOURCE_PROJECT_PATH == 'pleroma/pleroma' && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == 'weblate'
  47. when: never
  48. - if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop"
  49. before_script: ''
  50. after_script: ''
  51. cache: {}
  52. script:
  53. - apk add git
  54. - sh ./tools/check-changelog
  55. .build_changes_policy:
  56. rules:
  57. - changes:
  58. - ".gitlab-ci.yml"
  59. - "**/*.ex"
  60. - "**/*.exs"
  61. - "mix.lock"
  62. .using-ci-base:
  63. tags:
  64. - amd64
  65. build-1.12.3:
  66. extends:
  67. - .build_changes_policy
  68. - .using-ci-base
  69. stage: build
  70. script:
  71. - mix compile --force
  72. build-1.15.7-otp-25:
  73. extends:
  74. - .build_changes_policy
  75. - .using-ci-base
  76. stage: build
  77. image: git.pleroma.social:5050/pleroma/pleroma/ci-base:elixir-1.15
  78. allow_failure: true
  79. script:
  80. - mix compile --force
  81. spec-build:
  82. extends:
  83. - .using-ci-base
  84. stage: build
  85. rules:
  86. - changes:
  87. - ".gitlab-ci.yml"
  88. - "lib/pleroma/web/api_spec/**/*.ex"
  89. - "lib/pleroma/web/api_spec.ex"
  90. artifacts:
  91. paths:
  92. - spec.json
  93. script:
  94. - mix pleroma.openapi_spec spec.json
  95. benchmark:
  96. extends:
  97. - .using-ci-base
  98. stage: benchmark
  99. when: manual
  100. variables:
  101. MIX_ENV: benchmark
  102. services:
  103. - name: postgres:9.6-alpine
  104. alias: postgres
  105. command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
  106. script:
  107. - mix ecto.create
  108. - mix ecto.migrate
  109. - mix pleroma.load_testing
  110. unit-testing-1.12.3:
  111. extends:
  112. - .build_changes_policy
  113. - .using-ci-base
  114. stage: test
  115. cache: &testing_cache_policy
  116. <<: *global_cache_policy
  117. policy: pull
  118. services: &testing_services
  119. - name: postgres:13-alpine
  120. alias: postgres
  121. command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
  122. script: &testing_script
  123. - mix ecto.create
  124. - mix ecto.migrate
  125. - mix test --cover --preload-modules
  126. coverage: '/^Line total: ([^ ]*%)$/'
  127. artifacts:
  128. reports:
  129. coverage_report:
  130. coverage_format: cobertura
  131. path: coverage.xml
  132. unit-testing-1.15.7-otp-25:
  133. extends:
  134. - .build_changes_policy
  135. - .using-ci-base
  136. stage: test
  137. image: git.pleroma.social:5050/pleroma/pleroma/ci-base:elixir-1.15-otp25
  138. allow_failure: true
  139. cache: *testing_cache_policy
  140. services: *testing_services
  141. script: *testing_script
  142. unit-testing-1.12-erratic:
  143. extends:
  144. - .build_changes_policy
  145. - .using-ci-base
  146. stage: test
  147. retry: 2
  148. allow_failure: true
  149. cache: *testing_cache_policy
  150. services: *testing_services
  151. script:
  152. - mix ecto.create
  153. - mix ecto.migrate
  154. - mix test --only=erratic
  155. unit-testing-1.12-rum:
  156. extends:
  157. - .build_changes_policy
  158. - .using-ci-base
  159. stage: test
  160. cache: *testing_cache_policy
  161. services:
  162. - name: git.pleroma.social:5050/pleroma/pleroma/postgres-with-rum-13
  163. alias: postgres
  164. command: ["postgres", "-c", "fsync=off", "-c", "synchronous_commit=off", "-c", "full_page_writes=off"]
  165. variables:
  166. <<: *global_variables
  167. RUM_ENABLED: "true"
  168. script:
  169. - mix ecto.create
  170. - mix ecto.migrate
  171. - "mix ecto.migrate --migrations-path priv/repo/optional_migrations/rum_indexing/"
  172. - mix test --preload-modules
  173. formatting-1.13:
  174. extends: .build_changes_policy
  175. image: &formatting_elixir elixir:1.13-alpine
  176. stage: lint
  177. cache: *testing_cache_policy
  178. before_script: &current_bfr_script
  179. - apk update
  180. - apk add build-base cmake file-dev git openssl
  181. - mix local.hex --force
  182. - mix local.rebar --force
  183. - mix deps.get
  184. script:
  185. - mix format --check-formatted
  186. cycles-1.13:
  187. extends: .build_changes_policy
  188. image: *formatting_elixir
  189. stage: lint
  190. cache: {}
  191. before_script: *current_bfr_script
  192. script:
  193. - mix compile
  194. - mix xref graph --format cycles --label compile | awk '{print $0} END{exit ($0 != "No cycles found")}'
  195. analysis:
  196. extends:
  197. - .build_changes_policy
  198. - .using-ci-base
  199. stage: lint
  200. cache: *testing_cache_policy
  201. script:
  202. - mix credo --strict --only=warnings,todo,fixme,consistency,readability
  203. dialyzer:
  204. extends:
  205. - .build_changes_policy
  206. - .using-ci-base
  207. stage: lint
  208. allow_failure: true
  209. when: manual
  210. cache: *testing_cache_policy
  211. tags:
  212. - feld
  213. script:
  214. - mix dialyzer
  215. docs-deploy:
  216. stage: deploy
  217. cache: *testing_cache_policy
  218. image: alpine:latest
  219. only:
  220. - stable@pleroma/pleroma
  221. - develop@pleroma/pleroma
  222. before_script:
  223. - apk add curl
  224. script:
  225. - curl --fail-with-body -X POST -F"token=$CI_JOB_TOKEN" -F'ref=master' -F"variables[BRANCH]=$CI_COMMIT_REF_NAME" https://git.pleroma.social/api/v4/projects/673/trigger/pipeline
  226. review_app:
  227. image: alpine:3.9
  228. stage: deploy
  229. before_script:
  230. - apk update && apk add openssh-client git
  231. when: manual
  232. environment:
  233. name: review/$CI_COMMIT_REF_NAME
  234. url: https://$CI_ENVIRONMENT_SLUG.pleroma.online/
  235. on_stop: stop_review_app
  236. only:
  237. - branches
  238. except:
  239. - master
  240. - develop
  241. script:
  242. - echo "$CI_ENVIRONMENT_SLUG"
  243. - mkdir -p ~/.ssh
  244. - eval $(ssh-agent -s)
  245. - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
  246. - ssh-keyscan -H "pleroma.online" >> ~/.ssh/known_hosts
  247. - (ssh -t dokku@pleroma.online -- apps:create "$CI_ENVIRONMENT_SLUG") || true
  248. - (ssh -t dokku@pleroma.online -- git:set "$CI_ENVIRONMENT_SLUG" keep-git-dir true) || true
  249. - 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
  250. - (ssh -t dokku@pleroma.online -- postgres:create $(echo $CI_ENVIRONMENT_SLUG | sed -e 's/-/_/g')_db) || true
  251. - (ssh -t dokku@pleroma.online -- postgres:link $(echo $CI_ENVIRONMENT_SLUG | sed -e 's/-/_/g')_db "$CI_ENVIRONMENT_SLUG") || true
  252. - (ssh -t dokku@pleroma.online -- certs:add "$CI_ENVIRONMENT_SLUG" /home/dokku/server.crt /home/dokku/server.key) || true
  253. - git push -f dokku@pleroma.online:$CI_ENVIRONMENT_SLUG $CI_COMMIT_SHA:refs/heads/master
  254. spec-deploy:
  255. stage: deploy
  256. artifacts:
  257. paths:
  258. - spec.json
  259. only:
  260. - develop@pleroma/pleroma
  261. image: alpine:latest
  262. before_script:
  263. - apk add curl
  264. script:
  265. - curl --fail-with-body -X POST -F"token=$CI_JOB_TOKEN" -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
  266. stop_review_app:
  267. image: alpine:3.9
  268. stage: deploy
  269. before_script:
  270. - apk update && apk add openssh-client git
  271. when: manual
  272. environment:
  273. name: review/$CI_COMMIT_REF_NAME
  274. action: stop
  275. script:
  276. - echo "$CI_ENVIRONMENT_SLUG"
  277. - mkdir -p ~/.ssh
  278. - eval $(ssh-agent -s)
  279. - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
  280. - ssh-keyscan -H "pleroma.online" >> ~/.ssh/known_hosts
  281. - ssh -t dokku@pleroma.online -- --force apps:destroy "$CI_ENVIRONMENT_SLUG"
  282. - ssh -t dokku@pleroma.online -- --force postgres:destroy $(echo $CI_ENVIRONMENT_SLUG | sed -e 's/-/_/g')_db
  283. amd64:
  284. stage: release
  285. image: elixir:$ELIXIR_VER
  286. only: &release-only
  287. - stable@pleroma/pleroma
  288. - develop@pleroma/pleroma
  289. - /^maint/.*$/@pleroma/pleroma
  290. - /^release/.*$/@pleroma/pleroma
  291. tags:
  292. - amd64
  293. artifacts: &release-artifacts
  294. name: "pleroma-$CI_COMMIT_REF_NAME-$CI_COMMIT_SHORT_SHA-$CI_JOB_NAME"
  295. paths:
  296. - release/*
  297. # Ideally it would be never for master branch and with the next commit for develop,
  298. # but Gitlab does not support neither `only` for artifacts
  299. # nor setting it to never from .gitlab-ci.yml
  300. # nor expiring with the next commit
  301. expire_in: 42 yrs
  302. cache: &release-cache
  303. key: $CI_COMMIT_REF_NAME-$CI_JOB_NAME
  304. paths:
  305. - deps
  306. variables: &release-variables
  307. MIX_ENV: prod
  308. VIX_COMPILATION_MODE: PLATFORM_PROVIDED_LIBVIPS
  309. before_script: &before-release
  310. - apt-get update && apt-get install -y cmake libmagic-dev libvips-dev erlang-dev
  311. - echo "import Config" > config/prod.secret.exs
  312. - mix local.hex --force
  313. - mix local.rebar --force
  314. script: &release
  315. - mix deps.get --only prod
  316. - mkdir release
  317. - export PLEROMA_BUILD_BRANCH=$CI_COMMIT_REF_NAME
  318. - mix release --path release
  319. amd64-musl:
  320. stage: release
  321. artifacts: *release-artifacts
  322. only: *release-only
  323. image: elixir:$ELIXIR_VER-alpine
  324. tags:
  325. - amd64
  326. cache: *release-cache
  327. variables: *release-variables
  328. before_script: &before-release-musl
  329. - apk add git build-base cmake file-dev openssl vips-dev
  330. - echo "import Config" > config/prod.secret.exs
  331. - mix local.hex --force
  332. - mix local.rebar --force
  333. script: *release
  334. arm:
  335. stage: release
  336. artifacts: *release-artifacts
  337. only: *release-only
  338. tags:
  339. - arm32-specified
  340. image: arm32v7/elixir:$ELIXIR_VER
  341. cache: *release-cache
  342. variables: *release-variables
  343. before_script: *before-release
  344. script: *release
  345. arm-musl:
  346. stage: release
  347. artifacts: *release-artifacts
  348. only: *release-only
  349. tags:
  350. - arm32-specified
  351. image: arm32v7/elixir:$ELIXIR_VER-alpine
  352. cache: *release-cache
  353. variables: *release-variables
  354. before_script: *before-release-musl
  355. script: *release
  356. arm64:
  357. stage: release
  358. artifacts: *release-artifacts
  359. only: *release-only
  360. tags:
  361. - arm
  362. image: arm64v8/elixir:$ELIXIR_VER
  363. cache: *release-cache
  364. variables: *release-variables
  365. before_script: *before-release
  366. script: *release
  367. arm64-musl:
  368. stage: release
  369. artifacts: *release-artifacts
  370. only: *release-only
  371. tags:
  372. - arm
  373. image: arm64v8/elixir:$ELIXIR_VER-alpine
  374. cache: *release-cache
  375. variables: *release-variables
  376. before_script: *before-release-musl
  377. script: *release
  378. .kaniko:
  379. stage: docker
  380. image:
  381. name: gcr.io/kaniko-project/executor:debug
  382. entrypoint: [""]
  383. cache: {}
  384. dependencies: []
  385. before_script: &before-kaniko
  386. - export CI_JOB_TIMESTAMP=$(date --utc -Iseconds)
  387. - export CI_VCS_REF=$CI_COMMIT_SHORT_SHA
  388. - export IMAGE_TAG=$CI_REGISTRY_IMAGE/$BUILD_ARCH_IMG_SUFFIX:$CI_COMMIT_SHORT_SHA
  389. - export IMAGE_TAG_SLUG=$CI_REGISTRY_IMAGE/$BUILD_ARCH_IMG_SUFFIX:$CI_COMMIT_REF_SLUG
  390. - export IMAGE_TAG_LATEST=$CI_REGISTRY_IMAGE/$BUILD_ARCH_IMG_SUFFIX:latest
  391. - export IMAGE_TAG_LATEST_STABLE=$CI_REGISTRY_IMAGE/$BUILD_ARCH_IMG_SUFFIX:latest-stable
  392. - mkdir -p /kaniko/.docker
  393. - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
  394. .kaniko-latest:
  395. extends: .kaniko
  396. only:
  397. - develop@pleroma/pleroma
  398. script:
  399. - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --custom-platform=$BUILD_ARCH --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP --build-arg ELIXIR_IMG=$ELIXIR_IMG --destination $IMAGE_TAG --destination $IMAGE_TAG_SLUG --destination $IMAGE_TAG_LATEST
  400. .kaniko-stable:
  401. extends: .kaniko
  402. only:
  403. - stable@pleroma/pleroma
  404. script:
  405. - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --custom-platform=$BUILD_ARCH --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP --build-arg ELIXIR_IMG=$ELIXIR_IMG --destination $IMAGE_TAG --destination $IMAGE_TAG_SLUG --destination $IMAGE_TAG_LATEST_STABLE
  406. .kaniko-release:
  407. extends: .kaniko
  408. only:
  409. - /^release/.*$/@pleroma/pleroma
  410. script:
  411. - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --custom-platform=$BUILD_ARCH --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP --build-arg ELIXIR_IMG=$ELIXIR_IMG --destination $IMAGE_TAG --destination $IMAGE_TAG_SLUG
  412. .kaniko-adhoc:
  413. extends: .kaniko
  414. only:
  415. - /^build-docker/.*$/@pleroma/pleroma
  416. script:
  417. - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --custom-platform=$BUILD_ARCH --build-arg VCS_REF=$CI_VCS_REF --build-arg BUILD_DATE=$CI_JOB_TIMESTAMP --build-arg ELIXIR_IMG=$ELIXIR_IMG --destination $IMAGE_TAG --destination $IMAGE_TAG_SLUG
  418. .kaniko:linux/amd64:
  419. variables:
  420. BUILD_ARCH: linux/amd64
  421. BUILD_ARCH_IMG_SUFFIX: linux-amd64
  422. ELIXIR_IMG: hexpm/elixir
  423. tags:
  424. - amd64
  425. .kaniko:linux/arm64:
  426. variables:
  427. BUILD_ARCH: linux/arm64/v8
  428. BUILD_ARCH_IMG_SUFFIX: linux-arm64-v8
  429. ELIXIR_IMG: hexpm/elixir
  430. tags:
  431. - arm
  432. .kaniko:linux/arm:
  433. variables:
  434. BUILD_ARCH: linux/arm/v7
  435. BUILD_ARCH_IMG_SUFFIX: linux-arm-v7
  436. ELIXIR_IMG: git.pleroma.social:5050/pleroma/ci-image/elixir-linux-arm-v7
  437. tags:
  438. - arm32-specified
  439. kaniko-latest:linux/amd64:
  440. extends:
  441. - .kaniko-latest
  442. - .kaniko:linux/amd64
  443. kaniko-latest:linux/arm64:
  444. extends:
  445. - .kaniko-latest
  446. - .kaniko:linux/arm64
  447. kaniko-latest:linux/arm:
  448. extends:
  449. - .kaniko-latest
  450. - .kaniko:linux/arm
  451. kaniko-stable:linux/amd64:
  452. extends:
  453. - .kaniko-stable
  454. - .kaniko:linux/amd64
  455. kaniko-stable:linux/arm64:
  456. extends:
  457. - .kaniko-stable
  458. - .kaniko:linux/arm64
  459. kaniko-stable:linux/arm:
  460. extends:
  461. - .kaniko-stable
  462. - .kaniko:linux/arm
  463. kaniko-release:linux/amd64:
  464. extends:
  465. - .kaniko-release
  466. - .kaniko:linux/amd64
  467. kaniko-release:linux/arm64:
  468. extends:
  469. - .kaniko-release
  470. - .kaniko:linux/arm64
  471. kaniko-release:linux/arm:
  472. extends:
  473. - .kaniko-release
  474. - .kaniko:linux/arm
  475. .docker-combine:
  476. stage: docker-combine
  477. image: docker:cli
  478. cache: {}
  479. before_script:
  480. - 'BUILD_ARCHES="linux-amd64 linux-arm64-v8 linux-arm-v7"'
  481. - export IMAGE_TAG=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
  482. - export IMAGE_TAG_SLUG=$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
  483. - export IMAGE_TAG_LATEST=$CI_REGISTRY_IMAGE:latest
  484. - export IMAGE_TAG_LATEST_STABLE=$CI_REGISTRY_IMAGE:latest-stable
  485. - 'IMAGES=; for arch in $BUILD_ARCHES; do IMAGES="$IMAGES $CI_REGISTRY_IMAGE/$arch:$CI_COMMIT_SHORT_SHA"; done'
  486. - 'IMAGES_SLUG=; for arch in $BUILD_ARCHES; do IMAGES_SLUG="$IMAGES_SLUG $CI_REGISTRY_IMAGE/$arch:$CI_COMMIT_REF_SLUG"; done'
  487. - 'IMAGES_LATEST=; for arch in $BUILD_ARCHES; do IMAGES_LATEST="$IMAGES_LATEST $CI_REGISTRY_IMAGE/$arch:latest"; done'
  488. - 'IMAGES_LATEST_STABLE=; for arch in $BUILD_ARCHES; do IMAGES_LATEST_STABLE="$IMAGES_LATEST_STABLE $CI_REGISTRY_IMAGE/$arch:latest"; done'
  489. - mkdir -p ~/.docker
  490. - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > ~/.docker/config.json
  491. docker-combine:latest:
  492. extends: .docker-combine
  493. only:
  494. - develop@pleroma/pleroma
  495. script:
  496. - 'docker manifest create $IMAGE_TAG $IMAGES'
  497. - 'docker manifest push $IMAGE_TAG'
  498. - 'docker manifest create $IMAGE_TAG_SLUG $IMAGES_SLUG'
  499. - 'docker manifest push $IMAGE_TAG_SLUG'
  500. - 'docker manifest create $IMAGE_TAG_LATEST $IMAGES_LATEST'
  501. - 'docker manifest push $IMAGE_TAG_LATEST'
  502. docker-combine:stable:
  503. extends: .docker-combine
  504. only:
  505. - stable@pleroma/pleroma
  506. script:
  507. - 'docker manifest create $IMAGE_TAG $IMAGES'
  508. - 'docker manifest push $IMAGE_TAG'
  509. - 'docker manifest create $IMAGE_TAG_SLUG $IMAGES_SLUG'
  510. - 'docker manifest push $IMAGE_TAG_SLUG'
  511. - 'docker manifest create $IMAGE_TAG_LATEST_STABLE $IMAGES_LATEST_STABLE'
  512. - 'docker manifest push $IMAGE_TAG_LATEST_STABLE'
  513. docker-combine:release:
  514. extends: .docker-combine
  515. only:
  516. - /^release/.*$/@pleroma/pleroma
  517. script:
  518. - 'docker manifest create $IMAGE_TAG $IMAGES'
  519. - 'docker manifest push $IMAGE_TAG'
  520. - 'docker manifest create $IMAGE_TAG_SLUG $IMAGES_SLUG'
  521. - 'docker manifest push $IMAGE_TAG_SLUG'