stages:
  - build_and_test
  - package
  - security
  - upload
  - image

.img: &img
  image: "domaindrivenarchitecture/ddadevops-dind:4.11.3"
  services:
    - docker:dind
  before_script:
  - export RELEASE_ARTIFACT_TOKEN=$MEISSA_REPO_BUERO_RW
  - export IMAGE_DOCKERHUB_USER=$DOCKERHUB_USER
  - export IMAGE_DOCKERHUB_PASSWORD=$DOCKERHUB_PASSWORD
  - export IMAGE_TAG=$CI_COMMIT_TAG

.cljs-job: &cljs
  image: "domaindrivenarchitecture/ddadevops-clj-cljs:4.11.3"
  cache:
    key: ${CI_COMMIT_REF_SLUG}
    paths:
      - node_modules/
      - .shadow-cljs/
      - .m2
  before_script:
  - export RELEASE_ARTIFACT_TOKEN=$MEISSA_REPO_BUERO_RW
  - echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" > ~/.npmrc
  - npm install

.clj-job: &clj
  image: "domaindrivenarchitecture/ddadevops-clj:4.11.3"
  cache:
    key: ${CI_COMMIT_REF_SLUG}
    paths:
      - .m2
  before_script:
  - export RELEASE_ARTIFACT_TOKEN=$MEISSA_REPO_BUERO_RW
  - mkdir -p /root/.lein
  - echo "{:auth {:repository-auth {#\"clojars\" {:username \"${CLOJARS_USER}\" :password \"${CLOJARS_TOKEN_DOMAINDRIVENARCHITECTURE}\" }}}}" > ~/.lein/profiles.clj

.tag_only: &tag_only
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
      when: never
    - if: '$CI_COMMIT_TAG =~ /^[0-9]+\.[0-9]+\.[0-9]+$/'

test-clj:
  <<: *clj
  stage: build_and_test
  script:
    - pyb test_clj

test-cljs:
  <<: *cljs
  stage: build_and_test
  script:
    - pyb test_cljs

test-schema:
  <<: *clj
  stage: build_and_test
  script:
    - pyb test_schema
  artifacts:
    paths:
      - target/uberjar

report-frontend:
  <<: *cljs
  stage: package
  script:
    - pyb report_frontend
  artifacts:
    paths:
      - target/frontend-build/build-report.html

package-frontend:
  <<: *cljs
  stage: package
  script:
    - pyb package_frontend
  artifacts:
    paths:
      - target/frontend-build

package-uberjar:
  <<: *clj
  stage: package
  script:
    - pyb package_uberjar
  artifacts:
    paths:
      - target/uberjar

package-native:
  <<: *clj
  stage: package
  script:
    - pyb package_native
  artifacts:
    paths:
      - target/graalvm

release-to-clojars:
  <<: *clj
  <<: *tag_only
  stage: upload
  script:
    - pyb upload_clj

release-to-forgejo:
  <<: *clj
  <<: *tag_only
  stage: upload
  script:
    - pyb publish_artifacts