resource_types:
- name: artifactory-resource
  type: docker-image
  source:
    repository: springio/artifactory-resource
    tag: 0.0.3
- name: pull-request
  type: docker-image
  source:
    repository: jtarchie/pr
- name: github-status-resource
  type: docker-image
  source:
    repository: dpb587/github-status-resource
    tag: master
- name: slack-notification
  type: docker-image
  source:
    repository: cfcommunity/slack-notification-resource
    tag: latest
resources:
- name: git-repo
  type: git
  source:
    uri: ((github-repo))
    username: ((github-username))
    password: ((github-password))
    branch: ((branch))
    ignore_paths: ["ci/images/*"]
- name: release-notes-repo
  type: git
  source:
    uri: https://github.com/mbhave/release-notes-generator
    branch: master
- name: git-pull-request
  type: pull-request
  source:
    access_token: ((github-access-token))
    repo: ((github-repo-name))
    base: ((branch))
    ignore_paths: ["ci/*"]
- name: ci-images-git-repo
  type: git
  source:
    uri: ((github-repo))
    branch: ((branch))
    paths: ["ci/images/*"]
- name: spring-boot-ci-image
  type: docker-image
  source:
    repository: ((docker-hub-organization))/spring-boot-ci-image
    username: ((docker-hub-username))
    password: ((docker-hub-password))
    tag: ((branch))
- name: spring-boot-jdk9-ci-image
  type: docker-image
  source:
    repository: ((docker-hub-organization))/spring-boot-jdk9-ci-image
    username: ((docker-hub-username))
    password: ((docker-hub-password))
    tag: ((branch))
- name: spring-boot-jdk10-ci-image
  type: docker-image
  source:
    repository: ((docker-hub-organization))/spring-boot-jdk10-ci-image
    username: ((docker-hub-username))
    password: ((docker-hub-password))
    tag: ((branch))
- name: artifactory-repo
  type: artifactory-resource
  source:
    uri: ((artifactory-server))
    username: ((artifactory-username))
    password: ((artifactory-password))
    build_name: ((build-name))
- name: repo-status-build
  type: github-status-resource
  source:
    repository: ((github-repo-name))
    access_token: ((github-access-token))
    branch: ((branch))
    context: build
- name: repo-status-jdk9-build
  type: github-status-resource
  source:
    repository: ((github-repo-name))
    access_token: ((github-access-token))
    branch: ((branch))
    context: jdk9-build
- name: repo-status-jdk10-build
  type: github-status-resource
  source:
    repository: ((github-repo-name))
    access_token: ((github-access-token))
    branch: ((branch))
    context: jdk10-build
- name: slack-alert
  type: slack-notification
  source:
    url: ((slack-webhook-url))
jobs:
- name: build-spring-boot-ci-images
  plan:
  - get: ci-images-git-repo
    trigger: true
  - put: spring-boot-ci-image
    params:
      build: ci-images-git-repo/ci/images/spring-boot-ci-image
  - put: spring-boot-jdk9-ci-image
    params:
      build: ci-images-git-repo/ci/images/spring-boot-jdk9-ci-image
  - put: spring-boot-jdk10-ci-image
    params:
      build: ci-images-git-repo/ci/images/spring-boot-jdk10-ci-image
- name: build
  serial: true
  public: true
  plan:
  - get: spring-boot-ci-image
  - get: git-repo
    trigger: true
  - put: repo-status-build
    params: { state: "pending", commit: "git-repo" }
  - do:
    - task: build-project
      privileged: true
      timeout: 1h30m
      image: spring-boot-ci-image
      file: git-repo/ci/tasks/build-project.yml
    - aggregate:
      - task: build-samples
        timeout: 1h30m
        image: spring-boot-ci-image
        file: git-repo/ci/tasks/build-samples.yml
      - task: build-integration-tests
        timeout: 1h30m
        image: spring-boot-ci-image
        file: git-repo/ci/tasks/build-integration-tests.yml
      - task: build-deployment-tests
        timeout: 1h30m
        image: spring-boot-ci-image
        file: git-repo/ci/tasks/build-deployment-tests.yml
    on_failure:
      do:
      - put: repo-status-build
        params: { state: "failure", commit: "git-repo" }
      - put: slack-alert
        params:
          text: ":concourse-failed: <https://ci.spring.io/teams/${BUILD_TEAM_NAME}/pipelines/${BUILD_PIPELINE_NAME}/jobs/${BUILD_JOB_NAME}/builds/${BUILD_NAME}|${BUILD_PIPELINE_NAME} ${BUILD_JOB_NAME} failed!>"
          silent: true
          icon_emoji: ":concourse:"
          username: concourse-ci
  - put: repo-status-build
    params: { state: "success", commit: "git-repo" }
  - put: slack-alert
    params:
      text: ":concourse-succeeded: <https://ci.spring.io/teams/${BUILD_TEAM_NAME}/pipelines/${BUILD_PIPELINE_NAME}/jobs/${BUILD_JOB_NAME}/builds/${BUILD_NAME}|${BUILD_PIPELINE_NAME} ${BUILD_JOB_NAME} was successful!>"
      silent: true
      icon_emoji: ":concourse:"
      username: concourse-ci
  - put: artifactory-repo
    params: &artifactory-params
      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"
      artifact_set:
      - include:
        - "/**/spring-boot-docs-*.zip"
        properties:
          "zip.type": "docs"
          "zip.deployed": "false"
- name: build-pull-requests
  serial: true
  public: true
  plan:
  - get: spring-boot-ci-image
  - get: git-repo
    resource: git-pull-request
    trigger: true
    version: every
  - do:
    - put: git-pull-request
      params:
        path: git-repo
        status: pending
    - task: build-project
      timeout: 1h30m
      image: spring-boot-ci-image
      file: git-repo/ci/tasks/build-pr-project.yml
    - aggregate:
      - task: build-samples
        timeout: 1h30m
        image: spring-boot-ci-image
        file: git-repo/ci/tasks/build-samples.yml
      - task: build-integration-tests
        timeout: 1h30m
        image: spring-boot-ci-image
        file: git-repo/ci/tasks/build-integration-tests.yml
      - task: build-deployment-tests
        timeout: 1h30m
        image: spring-boot-ci-image
        file: git-repo/ci/tasks/build-deployment-tests.yml
    on_success:
      put: git-pull-request
      params:
        path: git-repo
        status: success
    on_failure:
      put: git-pull-request
      params:
        path: git-repo
        status: failure
- name: jdk9-build
  serial: true
  public: true
  plan:
  - get: spring-boot-jdk9-ci-image
  - get: git-repo
    trigger: true
  - put: repo-status-jdk9-build
    params: { state: "pending", commit: "git-repo" }
  - do:
    - task: build-project
      privileged: true
      timeout: 1h30m
      image: spring-boot-jdk9-ci-image
      file: git-repo/ci/tasks/build-project.yml
    - aggregate:
      - task: build-samples
        timeout: 1h30m
        image: spring-boot-jdk9-ci-image
        file: git-repo/ci/tasks/build-samples.yml
      - task: build-integration-tests
        timeout: 1h30m
        image: spring-boot-jdk9-ci-image
        file: git-repo/ci/tasks/build-integration-tests.yml
      - task: build-deployment-tests
        timeout: 1h30m
        image: spring-boot-jdk9-ci-image
        file: git-repo/ci/tasks/build-deployment-tests.yml
    on_failure:
      do:
      - put: repo-status-jdk9-build
        params: { state: "failure", commit: "git-repo" }
      - put: slack-alert
        params:
          text: ":concourse-failed: <https://ci.spring.io/teams/${BUILD_TEAM_NAME}/pipelines/${BUILD_PIPELINE_NAME}/jobs/${BUILD_JOB_NAME}/builds/${BUILD_NAME}|${BUILD_PIPELINE_NAME} ${BUILD_JOB_NAME} failed!>"
          silent: true
          icon_emoji: ":concourse:"
          username: concourse-ci
  - put: repo-status-jdk9-build
    params: { state: "success", commit: "git-repo" }
  - put: slack-alert
    params:
      text: ":concourse-succeeded: <https://ci.spring.io/teams/${BUILD_TEAM_NAME}/pipelines/${BUILD_PIPELINE_NAME}/jobs/${BUILD_JOB_NAME}/builds/${BUILD_NAME}|${BUILD_PIPELINE_NAME} ${BUILD_JOB_NAME} was successful!>"
      silent: true
      icon_emoji: ":concourse:"
      username: concourse-ci
- name: jdk10-build
  serial: true
  public: true
  plan:
  - get: spring-boot-jdk10-ci-image
  - get: git-repo
    trigger: true
  - put: repo-status-jdk10-build
    params: { state: "pending", commit: "git-repo" }
  - do:
    - task: build-project
      privileged: true
      timeout: 1h30m
      image: spring-boot-jdk10-ci-image
      file: git-repo/ci/tasks/build-project.yml
    - aggregate:
      - task: build-samples
        timeout: 1h30m
        image: spring-boot-jdk10-ci-image
        file: git-repo/ci/tasks/build-samples.yml
      - task: build-integration-tests
        timeout: 1h30m
        image: spring-boot-jdk10-ci-image
        file: git-repo/ci/tasks/build-integration-tests.yml
      - task: build-deployment-tests
        timeout: 1h30m
        image: spring-boot-jdk10-ci-image
        file: git-repo/ci/tasks/build-deployment-tests.yml
    on_failure:
      do:
      - put: repo-status-jdk10-build
        params: { state: "failure", commit: "git-repo" }
      - put: slack-alert
        params:
          text: ":concourse-failed: <https://ci.spring.io/teams/${BUILD_TEAM_NAME}/pipelines/${BUILD_PIPELINE_NAME}/jobs/${BUILD_JOB_NAME}/builds/${BUILD_NAME}|${BUILD_PIPELINE_NAME} ${BUILD_JOB_NAME} failed!>"
          silent: true
          icon_emoji: ":concourse:"
          username: concourse-ci
  - put: repo-status-jdk10-build
    params: { state: "success", commit: "git-repo" }
  - put: slack-alert
    params:
      text: ":concourse-succeeded: <https://ci.spring.io/teams/${BUILD_TEAM_NAME}/pipelines/${BUILD_PIPELINE_NAME}/jobs/${BUILD_JOB_NAME}/builds/${BUILD_NAME}|${BUILD_PIPELINE_NAME} ${BUILD_JOB_NAME} was successful!>"
      silent: true
      icon_emoji: ":concourse:"
      username: concourse-ci
- name: stage-milestone
  serial: true
  plan:
  - get: spring-boot-ci-image
  - get: git-repo
    trigger: false
  - task: stage
    image: spring-boot-ci-image
    file: git-repo/ci/tasks/stage.yml
    params:
      RELEASE_TYPE: M
  - put: artifactory-repo
    params:
      <<: *artifactory-params
      repo: libs-staging-local
  - put: git-repo
    params:
      repository: stage-git-repo
- name: stage-rc
  serial: true
  plan:
  - get: spring-boot-ci-image
  - get: git-repo
    trigger: false
  - task: stage
    image: spring-boot-ci-image
    file: git-repo/ci/tasks/stage.yml
    params:
      RELEASE_TYPE: RC
  - put: artifactory-repo
    params:
      <<: *artifactory-params
      repo: libs-staging-local
  - put: git-repo
    params:
      repository: stage-git-repo
- name: stage-release
  serial: true
  plan:
  - get: spring-boot-ci-image
  - get: git-repo
    trigger: false
  - task: stage
    image: spring-boot-ci-image
    file: git-repo/ci/tasks/stage.yml
    params:
      RELEASE_TYPE: RELEASE
  - put: artifactory-repo
    params:
      <<: *artifactory-params
      repo: libs-staging-local
  - put: git-repo
    params:
      repository: stage-git-repo
- name: promote-milestone
  serial: true
  plan:
  - get: spring-boot-ci-image
  - get: git-repo
    trigger: false
  - get: release-notes-repo
  - get: artifactory-repo
    trigger: false
    passed: [stage-milestone]
    params:
      save_build_info: true
  - task: promote
    image: spring-boot-ci-image
    file: git-repo/ci/tasks/promote.yml
    params:
      RELEASE_TYPE: M
      ARTIFACTORY_SERVER: ((artifactory-server))
      ARTIFACTORY_USERNAME: ((artifactory-username))
      ARTIFACTORY_PASSWORD: ((artifactory-password))
  - task: publish-release-notes
    image: spring-boot-ci-image
    file: git-repo/ci/tasks/publish-release-notes.yml
    params:
      RELEASE_TYPE: M
      GITHUB_ORGANIZATION: spring-projects
      GITHUB_REPO: spring-boot
      GITHUB_USERNAME: ((github-username))
      GITHUB_PASSWORD: ((github-release-notes-access-token))
- name: promote-rc
  serial: true
  plan:
  - get: spring-boot-ci-image
  - get: git-repo
    trigger: false
  - get: release-notes-repo
  - get: artifactory-repo
    trigger: false
    passed: [stage-rc]
    params:
      save_build_info: true
  - task: promote
    image: spring-boot-ci-image
    file: git-repo/ci/tasks/promote.yml
    params:
      RELEASE_TYPE: RC
      ARTIFACTORY_SERVER: ((artifactory-server))
      ARTIFACTORY_USERNAME: ((artifactory-username))
      ARTIFACTORY_PASSWORD: ((artifactory-password))
  - task: publish-release-notes
    image: spring-boot-ci-image
    file: git-repo/ci/tasks/publish-release-notes.yml
    params:
      RELEASE_TYPE: RC
      GITHUB_ORGANIZATION: spring-projects
      GITHUB_REPO: spring-boot
      GITHUB_USERNAME: ((github-username))
      GITHUB_PASSWORD: ((github-release-notes-access-token))
- name: promote-release
  serial: true
  plan:
  - get: spring-boot-ci-image
  - get: git-repo
    trigger: false
  - get: release-notes-repo
  - get: artifactory-repo
    trigger: false
    passed: [stage-release]
    params:
      save_build_info: true
  - task: promote
    image: spring-boot-ci-image
    file: git-repo/ci/tasks/promote.yml
    params:
      RELEASE_TYPE: RELEASE
      ARTIFACTORY_SERVER: ((artifactory-server))
      ARTIFACTORY_USERNAME: ((artifactory-username))
      ARTIFACTORY_PASSWORD: ((artifactory-password))
      BINTRAY_SUBJECT: ((bintray-subject))
      BINTRAY_REPO: ((bintray-repo))
  - task: publish-release-notes
    image: spring-boot-ci-image
    file: git-repo/ci/tasks/publish-release-notes.yml
    params:
      RELEASE_TYPE: RELEASE
      GITHUB_ORGANIZATION: spring-projects
      GITHUB_REPO: spring-boot
      GITHUB_USERNAME: ((github-username))
      GITHUB_PASSWORD: ((github-release-notes-access-token))
- name: sync-to-maven-central
  serial: true
  plan:
  - get: spring-boot-ci-image
  - get: git-repo
  - get: artifactory-repo
    trigger: true
    passed: [promote-release]
    params:
      save_build_info: true
  - task: sync-to-maven-central
    image: spring-boot-ci-image
    file: git-repo/ci/tasks/sync-to-maven-central.yml
    params:
      BINTRAY_USERNAME: ((bintray-username))
      BINTRAY_PASSWORD: ((bintray-password))
      SONATYPE_USERNAME: ((sonatype-username))
      SONATYPE_PASSWORD: ((sonatype-password))
      BINTRAY_SUBJECT: ((bintray-subject))
      BINTRAY_REPO: ((bintray-repo))
groups:
- name: "Build"
  jobs: ["build", "jdk9-build", "jdk10-build"]
- name: "Release"
  jobs: ["stage-milestone", "stage-rc", "stage-release", "promote-milestone", "promote-rc", "promote-release", "sync-to-maven-central"]
- name: "CI Images"
  jobs: ["build-spring-boot-ci-images"]
- name: "Build Pull Requests"
  jobs: ["build-pull-requests"]
