anchors:
  artifactory-repo-put-params: &artifactory-repo-put-params
    signing_key: ((signing-key))
    signing_passphrase: ((signing-passphrase))
    repo: libs-snapshot-local
    folder: distribution-repository
    build_uri: "https://ci.spring.io/teams/${BUILD_TEAM_NAME}/pipelines/${BUILD_PIPELINE_NAME}/jobs/${BUILD_JOB_NAME}/builds/${BUILD_NAME}"
    build_number: "${BUILD_PIPELINE_NAME}-${BUILD_JOB_NAME}-${BUILD_NAME}"
    disable_checksum_uploads: true
    exclude:
      - "**/*.effective-pom"
      - "**/initializr-service-sample/**"
    artifact_set:
    - include:
      - "/**/initializr-docs-*.zip"
      properties:
        "zip.type": "docs"
        "zip.deployed": "false"
  artifactory-task-params: &artifactory-task-params
    ARTIFACTORY_SERVER: ((artifactory-server))
    ARTIFACTORY_USERNAME: ((artifactory-username))
    ARTIFACTORY_PASSWORD: ((artifactory-password))
  build-project-task-params: &build-project-task-params
    privileged: true
    timeout: ((task-timeout))
    file: git-repo/ci/tasks/build-project.yml
  git-repo-resource-source: &git-repo-resource-source
    uri: ((github-repo))
    username: ((github-username))
    password: ((github-ci-release-token))
    branch: ((branch))
  registry-image-resource-source: &registry-image-resource-source
    username: ((docker-hub-username))
    password: ((docker-hub-password))
  slack-fail-params: &slack-fail-params
    text: ":concourse-failed: <!here> <https://ci.spring.io/teams/${BUILD_TEAM_NAME}/pipelines/${BUILD_PIPELINE_NAME}/jobs/${BUILD_JOB_NAME}/builds/${BUILD_NAME}|failure: ${BUILD_PIPELINE_NAME} ${BUILD_JOB_NAME}>"
    silent: true
    icon_emoji: ":concourse:"
    username: concourse-ci
  slack-success-params: &slack-success-params
    text: ":concourse-succeeded: <https://ci.spring.io/teams/${BUILD_TEAM_NAME}/pipelines/${BUILD_PIPELINE_NAME}/jobs/${BUILD_JOB_NAME}/builds/${BUILD_NAME}|success: ${BUILD_PIPELINE_NAME} ${BUILD_JOB_NAME}>"
    silent: true
    icon_emoji: ":concourse:"
    username: concourse-ci
  sontatype-task-params: &sonatype-task-params
    SONATYPE_USERNAME: ((sonatype-username))
    SONATYPE_PASSWORD: ((sonatype-password))
    SONATYPE_URL: ((sonatype-url))
    SONATYPE_STAGING_PROFILE_ID: ((sonatype-staging-profile-id))
resource_types:
- name: artifactory-resource
  type: registry-image
  source:
    repository: springio/artifactory-resource
    tag: 0.0.17
    <<: *registry-image-resource-source
- name: github-release
  type: registry-image
  source:
    repository: concourse/github-release-resource
    tag: 1.5.5
    <<: *registry-image-resource-source
- name: github-status-resource
  type: registry-image
  source:
    repository: dpb587/github-status-resource
    tag: master
    <<: *registry-image-resource-source
- name: slack-notification
  type: registry-image
  source:
    repository: cfcommunity/slack-notification-resource
    tag: latest
    <<: *registry-image-resource-source
resources:
- name: git-repo
  type: git
  icon: github
  source:
    <<: *git-repo-resource-source
- name: git-repo-windows
  type: git
  icon: github
  source:
    <<: *git-repo-resource-source
    git_config:
    - name: core.autocrlf
      value: true
- name: github-release
  type: github-release
  icon: briefcase-download
  source:
    owner: spring-io
    repository: initializr
    access_token: ((github-ci-release-token))
    pre_release: false
- name: ci-images-git-repo
  type: git
  icon: github
  source:
    uri: ((github-repo))
    branch: ((branch))
    paths: ["ci/images/*"]
- name: ci-image
  type: registry-image
  icon: docker
  source:
    <<: *registry-image-resource-source
    repository: ((docker-hub-organization))/initializr-ci
    tag: ((milestone))
- name: artifactory-repo
  type: artifactory-resource
  icon: package-variant
  source:
    uri: ((artifactory-server))
    username: ((artifactory-username))
    password: ((artifactory-password))
    build_name: ((build-name))
- name: repo-status-build
  type: github-status-resource
  icon: eye-check-outline
  source:
    repository: ((github-repo-name))
    access_token: ((github-ci-status-token))
    branch: ((branch))
    context: build
- name: slack-alert
  type: slack-notification
  icon: slack
  source:
    url: ((slack-webhook-url))
- name: daily
  type: time
  icon: clock-outline
  source: { interval: "24h" }
jobs:
- name: build-ci-image
  plan:
  - get: ci-images-git-repo
    trigger: true
  - get: git-repo
  - in_parallel:
    - task: build-ci-image
      privileged: true
      file: git-repo/ci/tasks/build-ci-image.yml
      output_mapping:
        image: ci-image
      vars:
        ci-image-name: ci-image
        <<: *registry-image-resource-source
  - in_parallel:
    - put: ci-image
      params:
        image: ci-image/image.tar
- name: build
  serial: true
  public: true
  plan:
  - get: ci-image
  - get: git-repo
    trigger: true
  - put: repo-status-build
    params: { state: "pending", commit: "git-repo" }
  - do:
    - task: build-project
      image: ci-image
      <<: *build-project-task-params
    on_failure:
      do:
      - put: repo-status-build
        params: { state: "failure", commit: "git-repo" }
      - put: slack-alert
        params:
          <<: *slack-fail-params
  - put: repo-status-build
    params: { state: "success", commit: "git-repo" }
  - put: artifactory-repo
    params:
      <<: *artifactory-repo-put-params
    on_failure:
      do:
      - put: slack-alert
        params:
          <<: *slack-fail-params
  - put: slack-alert
    params:
      <<: *slack-success-params
- name: windows-build
  serial: true
  plan:
  - get: git-repo
    resource: git-repo-windows
  - get: daily
    trigger: true
  - do:
    - task: build-project
      privileged: true
      file: git-repo/ci/tasks/build-project-windows.yml
      tags: [ WIN64 ]
      timeout: ((task-timeout))
      params:
        BRANCH: ((branch))
    on_failure:
      do:
      - put: slack-alert
        params:
          <<: *slack-fail-params
  - put: slack-alert
    params:
      <<: *slack-success-params
- name: stage-release
  serial: true
  plan:
  - get: ci-image
  - get: git-repo
    trigger: false
  - task: stage
    image: ci-image
    file: git-repo/ci/tasks/stage.yml
    params:
      RELEASE_TYPE: RELEASE
  - put: artifactory-repo
    params:
      <<: *artifactory-repo-put-params
      repo: libs-staging-local
  - put: git-repo
    params:
      repository: stage-git-repo
- name: promote-release
  serial: true
  plan:
  - get: ci-image
  - get: git-repo
    trigger: false
  - get: artifactory-repo
    trigger: false
    passed: [stage-release]
    params:
      download_artifacts: true
      save_build_info: true
  - task: promote
    image: ci-image
    file: git-repo/ci/tasks/promote.yml
    params:
      RELEASE_TYPE: RELEASE
      <<: *artifactory-task-params
      <<: *sonatype-task-params
- name: create-github-release
  serial: true
  plan:
  - get: ci-image
  - get: git-repo
  - get: artifactory-repo
    trigger: true
    passed: [promote-release]
    params:
      download_artifacts: false
      save_build_info: true
  - task: generate-changelog
    file: git-repo/ci/tasks/generate-changelog.yml
    params:
      RELEASE_TYPE: RELEASE
      GITHUB_USERNAME: ((github-username))
      GITHUB_TOKEN: ((github-ci-release-token))
    vars:
      <<: *registry-image-resource-source
  - put: github-release
    params:
      name: generated-changelog/tag
      tag: generated-changelog/tag
      body: generated-changelog/changelog.md
groups:
- name: "build"
  jobs: ["build", "windows-build"]
- name: "releases"
  jobs: ["stage-release", "promote-release", "create-github-release"]
- name: "ci-images"
  jobs: ["build-ci-image"]