logo

pleroma

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

.gitlab-ci.yml (15907B)


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