logo

pleroma

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

.gitlab-ci.yml (15897B)


  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. - build
  26. - lint
  27. - test
  28. - check-changelog
  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:11.22-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. formatting-1.13:
  156. extends: .build_changes_policy
  157. image: &formatting_elixir elixir:1.13-alpine
  158. stage: lint
  159. cache: *testing_cache_policy
  160. before_script: &current_bfr_script
  161. - apk update
  162. - apk add build-base cmake file-dev git openssl
  163. - mix local.hex --force
  164. - mix local.rebar --force
  165. - mix deps.get
  166. script:
  167. - mix format --check-formatted
  168. cycles-1.13:
  169. extends: .build_changes_policy
  170. image: *formatting_elixir
  171. stage: lint
  172. cache: {}
  173. before_script: *current_bfr_script
  174. script:
  175. - mix compile
  176. - mix xref graph --format cycles --label compile | awk '{print $0} END{exit ($0 != "No cycles found")}'
  177. analysis:
  178. extends:
  179. - .build_changes_policy
  180. - .using-ci-base
  181. stage: lint
  182. cache: *testing_cache_policy
  183. script:
  184. - mix credo --strict --only=warnings,todo,fixme,consistency,readability
  185. dialyzer:
  186. extends:
  187. - .build_changes_policy
  188. - .using-ci-base
  189. stage: lint
  190. allow_failure: true
  191. when: manual
  192. cache: *testing_cache_policy
  193. tags:
  194. - feld
  195. script:
  196. - mix dialyzer
  197. docs-deploy:
  198. stage: deploy
  199. cache: *testing_cache_policy
  200. image: alpine:latest
  201. only:
  202. - stable@pleroma/pleroma
  203. - develop@pleroma/pleroma
  204. before_script:
  205. - apk add curl
  206. script:
  207. - 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
  208. 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. url: https://$CI_ENVIRONMENT_SLUG.pleroma.online/
  217. on_stop: stop_review_app
  218. only:
  219. - branches
  220. except:
  221. - master
  222. - develop
  223. script:
  224. - echo "$CI_ENVIRONMENT_SLUG"
  225. - mkdir -p ~/.ssh
  226. - eval $(ssh-agent -s)
  227. - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
  228. - ssh-keyscan -H "pleroma.online" >> ~/.ssh/known_hosts
  229. - (ssh -t dokku@pleroma.online -- apps:create "$CI_ENVIRONMENT_SLUG") || true
  230. - (ssh -t dokku@pleroma.online -- git:set "$CI_ENVIRONMENT_SLUG" keep-git-dir true) || true
  231. - 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
  232. - (ssh -t dokku@pleroma.online -- postgres:create $(echo $CI_ENVIRONMENT_SLUG | sed -e 's/-/_/g')_db) || true
  233. - (ssh -t dokku@pleroma.online -- postgres:link $(echo $CI_ENVIRONMENT_SLUG | sed -e 's/-/_/g')_db "$CI_ENVIRONMENT_SLUG") || true
  234. - (ssh -t dokku@pleroma.online -- certs:add "$CI_ENVIRONMENT_SLUG" /home/dokku/server.crt /home/dokku/server.key) || true
  235. - git push -f dokku@pleroma.online:$CI_ENVIRONMENT_SLUG $CI_COMMIT_SHA:refs/heads/master
  236. spec-deploy:
  237. stage: deploy
  238. artifacts:
  239. paths:
  240. - spec.json
  241. only:
  242. - develop@pleroma/pleroma
  243. image: alpine:latest
  244. before_script:
  245. - apk add curl
  246. script:
  247. - 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
  248. stop_review_app:
  249. image: alpine:3.9
  250. stage: deploy
  251. before_script:
  252. - apk update && apk add openssh-client git
  253. when: manual
  254. environment:
  255. name: review/$CI_COMMIT_REF_NAME
  256. action: stop
  257. script:
  258. - echo "$CI_ENVIRONMENT_SLUG"
  259. - mkdir -p ~/.ssh
  260. - eval $(ssh-agent -s)
  261. - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
  262. - ssh-keyscan -H "pleroma.online" >> ~/.ssh/known_hosts
  263. - ssh -t dokku@pleroma.online -- --force apps:destroy "$CI_ENVIRONMENT_SLUG"
  264. - ssh -t dokku@pleroma.online -- --force postgres:destroy $(echo $CI_ENVIRONMENT_SLUG | sed -e 's/-/_/g')_db
  265. amd64:
  266. stage: release
  267. image: elixir:$ELIXIR_VER
  268. only: &release-only
  269. - stable@pleroma/pleroma
  270. - develop@pleroma/pleroma
  271. - /^maint/.*$/@pleroma/pleroma
  272. - /^release/.*$/@pleroma/pleroma
  273. tags:
  274. - amd64
  275. artifacts: &release-artifacts
  276. name: "pleroma-$CI_COMMIT_REF_NAME-$CI_COMMIT_SHORT_SHA-$CI_JOB_NAME"
  277. paths:
  278. - release/*
  279. # Ideally it would be never for master branch and with the next commit for develop,
  280. # but Gitlab does not support neither `only` for artifacts
  281. # nor setting it to never from .gitlab-ci.yml
  282. # nor expiring with the next commit
  283. expire_in: 42 yrs
  284. cache: &release-cache
  285. key: $CI_COMMIT_REF_NAME-$CI_JOB_NAME
  286. paths:
  287. - deps
  288. variables: &release-variables
  289. MIX_ENV: prod
  290. VIX_COMPILATION_MODE: PLATFORM_PROVIDED_LIBVIPS
  291. before_script: &before-release
  292. - apt-get update && apt-get install -y cmake libmagic-dev libvips-dev erlang-dev
  293. - echo "import Config" > config/prod.secret.exs
  294. - mix local.hex --force
  295. - mix local.rebar --force
  296. script: &release
  297. - mix deps.get --only prod
  298. - mkdir release
  299. - export PLEROMA_BUILD_BRANCH=$CI_COMMIT_REF_NAME
  300. - mix release --path release
  301. amd64-musl:
  302. stage: release
  303. artifacts: *release-artifacts
  304. only: *release-only
  305. image: elixir:$ELIXIR_VER-alpine
  306. tags:
  307. - amd64
  308. cache: *release-cache
  309. variables: *release-variables
  310. before_script: &before-release-musl
  311. - apk add git build-base cmake file-dev openssl vips-dev
  312. - echo "import Config" > config/prod.secret.exs
  313. - mix local.hex --force
  314. - mix local.rebar --force
  315. script: *release
  316. arm:
  317. stage: release
  318. artifacts: *release-artifacts
  319. only: *release-only
  320. tags:
  321. - arm32-specified
  322. image: arm32v7/elixir:$ELIXIR_VER
  323. cache: *release-cache
  324. variables: *release-variables
  325. before_script: *before-release
  326. script: *release
  327. arm-musl:
  328. stage: release
  329. artifacts: *release-artifacts
  330. only: *release-only
  331. tags:
  332. - arm32-specified
  333. image: arm32v7/elixir:$ELIXIR_VER-alpine
  334. cache: *release-cache
  335. variables: *release-variables
  336. before_script: *before-release-musl
  337. script: *release
  338. arm64:
  339. stage: release
  340. artifacts: *release-artifacts
  341. only: *release-only
  342. tags:
  343. - arm
  344. image: arm64v8/elixir:$ELIXIR_VER
  345. cache: *release-cache
  346. variables: *release-variables
  347. before_script: *before-release
  348. script: *release
  349. arm64-musl:
  350. stage: release
  351. artifacts: *release-artifacts
  352. only: *release-only
  353. tags:
  354. - arm
  355. image: arm64v8/elixir:$ELIXIR_VER-alpine
  356. cache: *release-cache
  357. variables: *release-variables
  358. before_script: *before-release-musl
  359. script: *release
  360. .kaniko:
  361. stage: docker
  362. image:
  363. name: gcr.io/kaniko-project/executor:debug
  364. entrypoint: [""]
  365. cache: {}
  366. dependencies: []
  367. before_script: &before-kaniko
  368. - export CI_JOB_TIMESTAMP=$(date --utc -Iseconds)
  369. - export CI_VCS_REF=$CI_COMMIT_SHORT_SHA
  370. - export IMAGE_TAG=$CI_REGISTRY_IMAGE/$BUILD_ARCH_IMG_SUFFIX:$CI_COMMIT_SHORT_SHA
  371. - export IMAGE_TAG_SLUG=$CI_REGISTRY_IMAGE/$BUILD_ARCH_IMG_SUFFIX:$CI_COMMIT_REF_SLUG
  372. - export IMAGE_TAG_LATEST=$CI_REGISTRY_IMAGE/$BUILD_ARCH_IMG_SUFFIX:latest
  373. - export IMAGE_TAG_LATEST_STABLE=$CI_REGISTRY_IMAGE/$BUILD_ARCH_IMG_SUFFIX:latest-stable
  374. - mkdir -p /kaniko/.docker
  375. - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
  376. .kaniko-latest:
  377. extends: .kaniko
  378. only:
  379. - develop@pleroma/pleroma
  380. script:
  381. - /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
  382. .kaniko-stable:
  383. extends: .kaniko
  384. only:
  385. - stable@pleroma/pleroma
  386. script:
  387. - /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
  388. .kaniko-release:
  389. extends: .kaniko
  390. only:
  391. - /^release/.*$/@pleroma/pleroma
  392. script:
  393. - /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
  394. .kaniko-adhoc:
  395. extends: .kaniko
  396. only:
  397. - /^build-docker/.*$/@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
  400. .kaniko:linux/amd64:
  401. variables:
  402. BUILD_ARCH: linux/amd64
  403. BUILD_ARCH_IMG_SUFFIX: linux-amd64
  404. ELIXIR_IMG: hexpm/elixir
  405. tags:
  406. - amd64
  407. .kaniko:linux/arm64:
  408. variables:
  409. BUILD_ARCH: linux/arm64/v8
  410. BUILD_ARCH_IMG_SUFFIX: linux-arm64-v8
  411. ELIXIR_IMG: hexpm/elixir
  412. tags:
  413. - arm
  414. .kaniko:linux/arm:
  415. variables:
  416. BUILD_ARCH: linux/arm/v7
  417. BUILD_ARCH_IMG_SUFFIX: linux-arm-v7
  418. ELIXIR_IMG: git.pleroma.social:5050/pleroma/ci-image/elixir-linux-arm-v7
  419. tags:
  420. - arm32-specified
  421. kaniko-latest:linux/amd64:
  422. extends:
  423. - .kaniko-latest
  424. - .kaniko:linux/amd64
  425. kaniko-latest:linux/arm64:
  426. extends:
  427. - .kaniko-latest
  428. - .kaniko:linux/arm64
  429. kaniko-latest:linux/arm:
  430. extends:
  431. - .kaniko-latest
  432. - .kaniko:linux/arm
  433. kaniko-stable:linux/amd64:
  434. extends:
  435. - .kaniko-stable
  436. - .kaniko:linux/amd64
  437. kaniko-stable:linux/arm64:
  438. extends:
  439. - .kaniko-stable
  440. - .kaniko:linux/arm64
  441. kaniko-stable:linux/arm:
  442. extends:
  443. - .kaniko-stable
  444. - .kaniko:linux/arm
  445. kaniko-release:linux/amd64:
  446. extends:
  447. - .kaniko-release
  448. - .kaniko:linux/amd64
  449. kaniko-release:linux/arm64:
  450. extends:
  451. - .kaniko-release
  452. - .kaniko:linux/arm64
  453. kaniko-release:linux/arm:
  454. extends:
  455. - .kaniko-release
  456. - .kaniko:linux/arm
  457. .docker-combine:
  458. stage: docker-combine
  459. image: docker:cli
  460. cache: {}
  461. before_script:
  462. - 'BUILD_ARCHES="linux-amd64 linux-arm64-v8 linux-arm-v7"'
  463. - export IMAGE_TAG=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
  464. - export IMAGE_TAG_SLUG=$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
  465. - export IMAGE_TAG_LATEST=$CI_REGISTRY_IMAGE:latest
  466. - export IMAGE_TAG_LATEST_STABLE=$CI_REGISTRY_IMAGE:latest-stable
  467. - 'IMAGES=; for arch in $BUILD_ARCHES; do IMAGES="$IMAGES $CI_REGISTRY_IMAGE/$arch:$CI_COMMIT_SHORT_SHA"; done'
  468. - 'IMAGES_SLUG=; for arch in $BUILD_ARCHES; do IMAGES_SLUG="$IMAGES_SLUG $CI_REGISTRY_IMAGE/$arch:$CI_COMMIT_REF_SLUG"; done'
  469. - 'IMAGES_LATEST=; for arch in $BUILD_ARCHES; do IMAGES_LATEST="$IMAGES_LATEST $CI_REGISTRY_IMAGE/$arch:latest"; done'
  470. - 'IMAGES_LATEST_STABLE=; for arch in $BUILD_ARCHES; do IMAGES_LATEST_STABLE="$IMAGES_LATEST_STABLE $CI_REGISTRY_IMAGE/$arch:latest"; done'
  471. - mkdir -p ~/.docker
  472. - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > ~/.docker/config.json
  473. docker-combine:latest:
  474. extends: .docker-combine
  475. only:
  476. - develop@pleroma/pleroma
  477. script:
  478. - 'docker manifest create $IMAGE_TAG $IMAGES'
  479. - 'docker manifest push $IMAGE_TAG'
  480. - 'docker manifest create $IMAGE_TAG_SLUG $IMAGES_SLUG'
  481. - 'docker manifest push $IMAGE_TAG_SLUG'
  482. - 'docker manifest create $IMAGE_TAG_LATEST $IMAGES_LATEST'
  483. - 'docker manifest push $IMAGE_TAG_LATEST'
  484. docker-combine:stable:
  485. extends: .docker-combine
  486. only:
  487. - stable@pleroma/pleroma
  488. script:
  489. - 'docker manifest create $IMAGE_TAG $IMAGES'
  490. - 'docker manifest push $IMAGE_TAG'
  491. - 'docker manifest create $IMAGE_TAG_SLUG $IMAGES_SLUG'
  492. - 'docker manifest push $IMAGE_TAG_SLUG'
  493. - 'docker manifest create $IMAGE_TAG_LATEST_STABLE $IMAGES_LATEST_STABLE'
  494. - 'docker manifest push $IMAGE_TAG_LATEST_STABLE'
  495. docker-combine:release:
  496. extends: .docker-combine
  497. only:
  498. - /^release/.*$/@pleroma/pleroma
  499. script:
  500. - 'docker manifest create $IMAGE_TAG $IMAGES'
  501. - 'docker manifest push $IMAGE_TAG'
  502. - 'docker manifest create $IMAGE_TAG_SLUG $IMAGES_SLUG'
  503. - 'docker manifest push $IMAGE_TAG_SLUG'