<commit_before>== Continuous Integration and Deployment with Concourse

The Sagan application is continuously built, tested and deployed in production with http://concourse.ci[Concourse CI].
You can check the status of the Concourse pipeline at any time on our
https://ci.spring.io/teams/sagan/pipelines/sagan[Concourse instance].

=== Sagan pipelines

Sagan is made of several applications, including the website itself, `sagan-site`.

The https://ci.spring.io/teams/sagan/pipelines/sagan[Sagan pipeline] has a job for each application,
but they're all quite similar.

. Continuously check the Sagan GitHub repository for changes
. Start a build
. Checkout the git repository
. Build the application and run the tests
. Deploy the application to https://run.pivotal.io/[Pivotal Web Services] with zero downtime
. Notify the private Slack channel


=== Setting up a Concourse pipeline

Everything you need to deploy an identical Concourse pipeline is here. The `pipeline.yml` file
describes the resources, jobs and steps that make the Sagan pipeline. It is referencing the
various tasks and CloudFoundry manifests as external files under the concourse folder.

Some job steps require credentials and secrets; instead of adding them to `pipeline.yml` file
(and to the commit history), they can be stored in a separate (private) file or in a
https://concourse-ci.org/creds.html[credentials manager]. You can spot those `\((parameters))`
in the pipeline description.

To deploy the pipeline to an existing Concourse instance, in a existing `sagan` target, you<commit_msg>Fix broken link in Concourse README<commit_after>== Continuous Integration and Deployment with Concourse

The Sagan application is continuously built, tested and deployed in production with https://concourse-ci.org/[Concourse CI].
You can check the status of the Concourse pipeline at any time on our
https://ci.spring.io/teams/sagan/pipelines/sagan[Concourse instance].

=== Sagan pipelines

Sagan is made of several applications, including the website itself, `sagan-site`.

The https://ci.spring.io/teams/sagan/pipelines/sagan[Sagan pipeline] has a job for each application,
but they're all quite similar.

. Continuously check the Sagan GitHub repository for changes
. Start a build
. Checkout the git repository
. Build the application and run the tests
. Deploy the application to https://run.pivotal.io/[Pivotal Web Services] with zero downtime
. Notify the private Slack channel


=== Setting up a Concourse pipeline

Everything you need to deploy an identical Concourse pipeline is here. The `pipeline.yml` file
describes the resources, jobs and steps that make the Sagan pipeline. It is referencing the
various tasks and CloudFoundry manifests as external files under the concourse folder.

Some job steps require credentials and secrets; instead of adding them to `pipeline.yml` file
(and to the commit history), they can be stored in a separate (private) file or in a
https://concourse-ci.org/creds.html[credentials manager]. You can spot those `\((parameters))`
in the pipeline description.

To deploy the pipeline to an existing Concourse instance, in a existing `sagan` target, you
{'fraction_non_alphanumeric': 0.06573957016434892, 'fraction_numerical': 0.0, 'mean_word_length': 4.775547445255475, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 9, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7620048', 'n_tokens_mistral': 833, 'n_tokens_neox': 803, 'n_words': 412}