stages: - tests - build - publish - release variables: DOC_BRANCH: doc DOC_REMOTE: https://gitlab-ci-token:${ACCESS_TOKEN}@${CI_SERVER_HOST}/${CI_PROJECT_PATH}.git PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip" PACKAGE_REGISTRY_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/${CI_PROJECT_NAME}/${CI_COMMIT_TAG}" tests:bookworm: image: name: docker.io/brenard/ldapsaisie:bookworm entrypoint: [""] stage: tests rules: - changes: - src/**/*.php script: - rm -fr vendor - composer install - service slapd start - > if [ "$GITLAB_CI" == "true" ]; then ./vendor/bin/phpstan analyse --no-interaction --configuration=.phpstan/config.neon --error-format=junit > tests-report-bookworm.xml else ./vendor/bin/phpstan analyse --no-interaction --configuration=.phpstan/config.neon fi artifacts: when: always paths: - tests-report-bookworm.xml reports: junit: tests-report-bookworm.xml tests:bullseye: image: name: docker.io/brenard/ldapsaisie:bullseye entrypoint: [""] stage: tests rules: - changes: - src/**/*.php script: - rm -fr vendor - composer install - service slapd start - > if [ "$GITLAB_CI" == "true" ]; then ./vendor/bin/phpstan analyse --no-interaction --configuration=.phpstan/config.neon --error-format=junit > tests-report-bullseye.xml else ./vendor/bin/phpstan analyse --no-interaction --configuration=.phpstan/config.neon fi artifacts: when: always paths: - tests-report-bullseye.xml reports: junit: tests-report-bullseye.xml tests:buster: image: name: docker.io/brenard/ldapsaisie:buster entrypoint: [""] stage: tests rules: - changes: - src/**/*.php script: - rm -fr vendor - composer install - service slapd start - ./vendor/bin/phpstan analyse --no-interaction --configuration=.phpstan/config.neon --error-format=junit > tests-report-buster.xml - > if [ "$GITLAB_CI" == "true" ]; then ./vendor/bin/phpstan analyse --no-interaction --configuration=.phpstan/config.neon --error-format=junit > tests-report-buster.xml else ./vendor/bin/phpstan analyse --no-interaction --configuration=.phpstan/config.neon fi artifacts: when: always paths: - tests-report-buster.xml reports: junit: tests-report-buster.xml tests:stretch: image: name: docker.io/brenard/ldapsaisie:stretch entrypoint: [""] stage: tests rules: - changes: - src/* script: - cd /tmp/ - composer require overtrue/phplint --dev - cd - - rm -f .phplint-cache - /tmp/vendor/bin/phplint src tests:jessie: image: name: docker.io/brenard/ldapsaisie:jessie entrypoint: [""] stage: tests rules: - changes: - src/**/*.php script: - cd /tmp/ - composer require overtrue/phplint --dev - cd - - rm -f .phplint-cache - /tmp/vendor/bin/phplint src build:debian-stable: image: docker.io/brenard/debian-python-deb:debian11 stage: build cache: paths: - .cache/pip only: - tags before_script: # Gitlab CI use shallow clone, but we need full history to generate changelog - git fetch --unshallow script: - ./build-deb.sh --install-build-deps - rm -fr dist/ldapsaisie-* - dpkg-parsechangelog --format dpkg|awk '/ ldapsaisie /,0'|tail -n +3 > dist/release-notes.md artifacts: paths: - dist/* build:debian-sid: image: docker.io/brenard/debian-python-deb:debian11 stage: build cache: paths: - .cache/pip only: - master before_script: # Gitlab CI use shallow clone, but we need full history to generate changelog - git fetch --unshallow script: - ./build-deb.sh --install-build-deps --sid - rm -fr dist/ldapsaisie-* artifacts: paths: - dist/* build:snapshot: stage: build image: docker.io/alpine only: - master script: - tar -czf ldapsaisie-snapshot.tar.gz --exclude=ldapsaisie-snapshot.tar.gz ./ artifacts: paths: - ldapsaisie-snapshot.tar.gz build:doc:html: stage: build image: docker.io/python:alpine cache: paths: - .cache/pip - doc/venv only: - master before_script: - apk add make git - git config user.name $GITLAB_USER_NAME - git config user.email $GITLAB_USER_EMAIL # Compute current version # Note: Gitlab CI use shallow clone, be sure to have all commits since latest tag - | git fetch --tags latest_tag_commit=$(git rev-list --tags --max-count=1) commit_date=$(git show -s --format="%ad" --date=short $latest_tag_commit) git fetch --shallow-since=$commit_date VERSION=$(git describe --tags) - cd doc - git fetch origin $DOC_BRANCH - git rev-parse --verify $DOC_BRANCH && git branch -D $DOC_BRANCH || echo "No existing local git $DOC_BRANCH branch" - git checkout -b $DOC_BRANCH origin/$DOC_BRANCH - git checkout $CI_COMMIT_SHA - make clean && make venv script: - make LdapSaisie.html - test -n "$CI_COMMIT_TAG" && DOC_TAG=stable || DOC_TAG=dev - source venv/bin/activate # We must have to activate the venv to use mike (direct call not supported) - mike deploy --branch $DOC_BRANCH --remote $DOC_REMOTE --push --update-aliases $VERSION $DOC_TAG - mike set-default --branch $DOC_BRANCH --remote $DOC_REMOTE --push $DOC_TAG artifacts: paths: - doc/LdapSaisie.html build:doc:pdf: stage: build image: name: docker.io/pink33n/html-to-pdf entrypoint: ["/bin/sh", "-c"] only: - master needs: - build:doc:html script: - rm -f doc/LdapSaisie.pdf - /usr/local/bin/entrypoint --url file://$(pwd)/doc/LdapSaisie.html --pdf doc/LdapSaisie.pdf || test -f doc/LdapSaisie.pdf artifacts: paths: - doc/LdapSaisie.pdf build:doc:epub: stage: build image: name: docker.io/pandoc/core entrypoint: ["/bin/sh", "-c"] only: - master needs: - build:doc:html before_script: - apk add make script: - cd doc - test ! -d venv && mkdir venv && touch public_html LdapSaisie.html - make LdapSaisie.epub artifacts: paths: - doc/LdapSaisie.epub build:doc:append_additional_versions: stage: build image: docker.io/python:alpine only: - master needs: - build:doc:html - build:doc:pdf - build:doc:epub before_script: - apk add git - git config user.name $GITLAB_USER_NAME - git config user.email $GITLAB_USER_EMAIL # Compute current version # Note: Gitlab CI use shallow clone, be sure to have all commits since latest tag - | git fetch --tags latest_tag_commit=$(git rev-list --tags --max-count=1) commit_date=$(git show -s --format="%ad" --date=short $latest_tag_commit) git fetch --shallow-since=$commit_date VERSION=$(git describe --tags) - cd doc - git fetch origin $DOC_BRANCH - git rev-parse --verify $DOC_BRANCH && git branch -D $DOC_BRANCH || echo "No existing local git $DOC_BRANCH branch" - git checkout -b $DOC_BRANCH origin/$DOC_BRANCH - git pull origin $DOC_BRANCH script: - cp LdapSaisie.html LdapSaisie.pdf LdapSaisie.epub dist/$VERSION/ - git add dist/$VERSION/ - git commit --amend --no-edit - git push --force $DOC_REMOTE $DOC_BRANCH publish:doc: stage: publish image: docker.io/alpine:latest only: - master needs: - build:doc:append_additional_versions before_script: - apk update && apk add git openssh-client rsync - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" | base64 -d | ssh-add - - mkdir ~/.ssh - echo "$SSH_HOST_KEY" | base64 -d > ~/.ssh/known_hosts - git fetch origin $DOC_BRANCH - git rev-parse --verify $DOC_BRANCH && git branch -D $DOC_BRANCH || echo "No existing local git $DOC_BRANCH branch" - git checkout -b $DOC_BRANCH origin/$DOC_BRANCH - git pull origin $DOC_BRANCH script: - rsync -atv --exclude '.git*' --delete --progress ./doc/dist/ $SSH_USER@$SSH_HOST:doc/ publish:snapshot: stage: publish image: docker.io/alpine:latest only: - master needs: - build:snapshot before_script: - apk update && apk add openssh-client rsync - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" | base64 -d | ssh-add - - mkdir ~/.ssh - echo "$SSH_HOST_KEY" | base64 -d > ~/.ssh/known_hosts script: - rsync -atv ldapsaisie-snapshot.tar.gz $SSH_USER@$SSH_HOST:download/ldapsaisie-snapshot.tar.gz publish:debian-stable: stage: publish image: docker.io/debian:stable-slim needs: - build:debian-stable only: - tags before_script: - apt-get update - apt-get install -y --no-install-recommends rsync openssh-client dupload - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" | base64 -d | ssh-add - - mkdir ~/.ssh - echo "$SSH_HOST_KEY" | base64 -d > ~/.ssh/known_hosts - echo "$DUPLOAD_CONFIG" | base64 -d > ~/.dupload.conf script: - echo "Publish stable debian packages on APT repository..." - dupload --to debian-stable dist/ldapsaisie*changes publish:gitlab: stage: publish image: name: docker.io/alpine/httpie entrypoint: ["/bin/sh", "-c"] needs: - build:debian-stable only: - tags script: - ./.gitlab/publish.sh artifacts: paths: - dist/release-notes.md - dist/release-files.txt publish:debian-sid: stage: publish image: docker.io/debian:stable-slim only: - master needs: - build:debian-sid before_script: - apt-get update - apt-get install -y --no-install-recommends rsync openssh-client dupload - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" | base64 -d | ssh-add - - mkdir ~/.ssh - echo "$SSH_HOST_KEY" | base64 -d > ~/.ssh/known_hosts - echo "$DUPLOAD_CONFIG" | base64 -d > ~/.dupload.conf script: - echo "Publish Sid debian packages on APT repository..." - dupload --to debian-sid dist/ldapsaisie*changes release: stage: release image: name: registry.gitlab.com/gitlab-org/release-cli:latest entrypoint: ["/bin/sh", "-c"] needs: - publish:gitlab only: - tags script: - ./.gitlab/release.sh