# This file is part of .gitlab-ci.yml
# Here are all jobs that are executed during "publish" stage

publish-rustdoc:
  stage: publish
  extends: .kubernetes-env
  variables:
    CI_IMAGE: node:18
    GIT_DEPTH: 100
    RUSTDOCS_DEPLOY_REFS: "master"
  rules:
    - if: $CI_PIPELINE_SOURCE == "pipeline"
      when: never
    - if: $CI_PIPELINE_SOURCE == "web" && $CI_COMMIT_REF_NAME == "master"
    - if: $CI_COMMIT_REF_NAME == "master"
  needs:
    - job: build-rustdoc
      artifacts: true
    - job: build-implementers-guide
      artifacts: true
  script:
    # If $CI_COMMIT_REF_NAME doesn't match one of $RUSTDOCS_DEPLOY_REFS space-separated values, we
    # exit immediately.
    # Putting spaces at the front and back to ensure we are not matching just any substring, but the
    # whole space-separated value.
    # setup ssh
    - eval $(ssh-agent)
    - ssh-add - <<< ${GITHUB_SSH_PRIV_KEY}
    - mkdir ~/.ssh && touch ~/.ssh/known_hosts
    - ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
    # Set git config
    - git config user.email "devops-team@parity.io"
    - git config user.name "${GITHUB_USER}"
    - git config remote.origin.url "git@github.com:/paritytech/${CI_PROJECT_NAME}.git"
    - git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
    - git fetch origin gh-pages
    # Save README and docs
    - cp -r ./crate-docs/ /tmp/doc/
    - cp -r ./artifacts/book/ /tmp/
    - cp README.md /tmp/doc/
    # we don't need to commit changes because we copy docs to /tmp
    - git checkout gh-pages --force
    # Enable if docs needed for other refs
    # Install `index-tpl-crud` and generate index.html based on RUSTDOCS_DEPLOY_REFS
    # - which index-tpl-crud &> /dev/null || yarn global add @substrate/index-tpl-crud
    # - index-tpl-crud upsert ./index.html ${CI_COMMIT_REF_NAME}
    # Ensure the destination dir doesn't exist.
    - rm -rf ${CI_COMMIT_REF_NAME}
    - rm -rf book/
    - mv -f /tmp/doc ${CI_COMMIT_REF_NAME}
    # dir for implementors guide
    - mkdir -p book
    - mv /tmp/book/html/* book/
    # Upload files
    - git add --all
    # `git commit` has an exit code of > 0 if there is nothing to commit.
    # This causes GitLab to exit immediately and marks this job failed.
    # We don't want to mark the entire job failed if there's nothing to
    # publish though, hence the `|| true`.
    - git commit -m "___Updated docs for ${CI_COMMIT_REF_NAME}___" ||
      echo "___Nothing to commit___"
    - git push origin gh-pages --force
  after_script:
    - rm -rf .git/ ./*

# note: images are used not only in zombienet but also in rococo, wococo and versi
.build-push-image:
  image: $BUILDAH_IMAGE
  variables:
    DOCKERFILE: "" # docker/path-to.Dockerfile
    IMAGE_NAME: "" # docker.io/paritypr/image_name
  script:
    # Dockertag should differ in a merge queue
    # TODO: test this
    # - if [[ $CI_COMMIT_REF_NAME == *"gh-readonly-queue"* ]]; export DOCKER_IMAGES_VERSION="${CI_COMMIT_SHORT_SHA}"; fi
    - $BUILDAH_COMMAND build
      --format=docker
      --build-arg VCS_REF="${CI_COMMIT_SHA}"
      --build-arg BUILD_DATE="$(date -u '+%Y-%m-%dT%H:%M:%SZ')"
      --build-arg IMAGE_NAME="${IMAGE_NAME}"
      --tag "$IMAGE_NAME:${DOCKER_IMAGES_VERSION}"
      --file ${DOCKERFILE} .
    - echo "$PARITYPR_PASS" |
      buildah login --username "$PARITYPR_USER" --password-stdin docker.io
    - $BUILDAH_COMMAND info
    - $BUILDAH_COMMAND push --format=v2s2 "$IMAGE_NAME:${DOCKER_IMAGES_VERSION}"
  after_script:
    - buildah logout --all

build-push-image-polkadot-parachain-debug:
  stage: publish
  extends:
    - .kubernetes-env
    - .common-refs
    - .build-push-image
  needs:
    - job: build-linux-stable-cumulus
      artifacts: true
  variables:
    DOCKERFILE: "docker/dockerfiles/polkadot-parachain/polkadot-parachain-debug_unsigned_injected.Dockerfile"
    IMAGE_NAME: "docker.io/paritypr/polkadot-parachain-debug"

build-push-image-test-parachain:
  stage: publish
  extends:
    - .kubernetes-env
    - .common-refs
    - .build-push-image
  needs:
    - job: build-test-parachain
      artifacts: true
  variables:
    DOCKERFILE: "docker/dockerfiles/test-parachain_injected.Dockerfile"
    IMAGE_NAME: "docker.io/paritypr/test-parachain"

build-push-image-polkadot-debug:
  stage: publish
  extends:
    - .kubernetes-env
    - .common-refs
    - .build-push-image
  needs:
    - job: build-linux-stable
      artifacts: true
  variables:
    DOCKERFILE: "docker/dockerfiles/polkadot/polkadot_injected_debug.Dockerfile"
    IMAGE_NAME: "docker.io/paritypr/polkadot-debug"

build-push-image-colander:
  stage: publish
  extends:
    - .kubernetes-env
    - .common-refs
    - .build-push-image
  needs:
    - job: build-test-collators
      artifacts: true
  variables:
    DOCKERFILE: "docker/dockerfiles/collator_injected.Dockerfile"
    IMAGE_NAME: "docker.io/paritypr/colander"

build-push-image-malus:
  stage: publish
  extends:
    - .kubernetes-env
    - .common-refs
    - .build-push-image
  needs:
    - job: build-malus
      artifacts: true
  variables:
    DOCKERFILE: "docker/dockerfiles/malus_injected.Dockerfile"
    IMAGE_NAME: "docker.io/paritypr/malus"

build-push-image-substrate-pr:
  stage: publish
  extends:
    - .kubernetes-env
    - .common-refs
    - .build-push-image
  needs:
    - job: build-linux-substrate
      artifacts: true
  variables:
    DOCKERFILE: "docker/dockerfiles/substrate_injected.Dockerfile"
    IMAGE_NAME: "docker.io/paritypr/substrate"
