logo

pleroma

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

.gitlab-ci.yml (16850B)


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