variables:
  NO_DOCKER: 1
  FORCE_COLOR: 1
  EARTHLY_EXEC_CMD: "/bin/sh"
  GIT_SUBMODULE_STRATEGY: normal

stages:
  - test
  - build_packages
  - release
  - distribute

unit_test_linux:
  stage: test
  image: docker
  services:
    - docker:dind
  only:
    - main
    - merge_requests
  before_script:
    - apk update && apk add git
    - wget https://github.com/earthly/earthly/releases/download/v0.6.2/earthly-linux-amd64 -O /usr/local/bin/earthly
    - chmod +x /usr/local/bin/earthly
    - earthly bootstrap
    - echo $CI_REGISTRY_PASSWORD | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY
  script:
    - if [ "$CI_COMMIT_BRANCH" == "main" ]; then cache_args="--save-inline-cache --push"; fi
    - if [ "$CI_PROJECT_PATH" != "veilid/veilid" ]; then project_args="--CI_PROJECT_PATH=$CI_PROJECT_PATH"; fi
    - earthly --use-inline-cache $cache_args --ci +unit-tests-linux $project_args
  resource_group: test
  when: manual

release_job:
  stage: release
  image: registry.gitlab.com/gitlab-org/release-cli:latest
  script:
    - echo "running release_job"
  release:                               # See https://docs.gitlab.com/ee/ci/yaml/#release for available properties
    tag_name: '$CI_COMMIT_TAG'
    description: '$CI_COMMIT_TAG'
  rules:
    - if: '$CI_COMMIT_TAG =~ /v\d.+/'

create_build_machines:
  stage: build_packages
  tags:
    - build-orchestration
  script:
    - /home/gitlab-runner/build-machine-ctl.sh create amd64-deb
    - /home/gitlab-runner/build-machine-ctl.sh create arm64-deb
    - /home/gitlab-runner/build-machine-ctl.sh create amd64-rpm
  rules:
    - if: '$CI_COMMIT_TAG =~ /v\d.+/'
  
package_amd64_deb:
  stage: build_packages
  needs:
    - create_build_machines
  tags:
    - build-amd64-deb
  script:
    - earthly bootstrap
    - earthly +package-linux-amd64-deb
    - /home/gitlab-runner/scp-to-orchestrator.sh
  rules:
    - if: '$CI_COMMIT_TAG =~ /v\d.+/'

package_arm64_deb:
  stage: build_packages
  needs:
    - create_build_machines
  tags:
    - build-arm64-deb
  script:
    - earthly bootstrap
    - earthly +package-linux-arm64-deb
    - /home/gitlab-runner/scp-to-orchestrator.sh
  rules:
    - if: '$CI_COMMIT_TAG =~ /v\d.+/'

package_amd64_rpm:
  stage: build_packages
  needs:
    - create_build_machines
  tags:
    - build-amd64-rpm
  script:
    - earthly bootstrap
    - earthly +package-linux-amd64-rpm
    - /home/gitlab-runner/scp-to-orchestrator.sh
  rules:
    - if: '$CI_COMMIT_TAG =~ /v\d.+/'

build_repositories:
  stage: distribute
  tags:
    - build-orchestration
  script:
    - /home/gitlab-runner/distribute-packages.sh
  rules:
    - if: '$CI_COMMIT_TAG =~ /v\d.+/'

deploy_repos:
  stage: distribute
  needs:
    - build_repositories
  tags: 
    - repo-server
  script: 
    - /home/gitlab-runner/deploy-repo.sh
  rules:
    - if: '$CI_COMMIT_TAG =~ /v\d.+/'

delete_build_machines:
  stage: distribute
  needs:
    - deploy_repos
  tags:
    - build-orchestration
  script:
    - /home/gitlab-runner/build-machine-ctl.sh delete amd64-deb
    - /home/gitlab-runner/build-machine-ctl.sh delete arm64-deb
    - /home/gitlab-runner/build-machine-ctl.sh delete amd64-rpm
  rules:
    - if: '$CI_COMMIT_TAG =~ /v\d.+/'