18F/federalist-builder

View on GitHub
ci/pipeline-dev.yml

Summary

Maintainability
Test Coverage
---
############################
#  SHARED

env-cf: &env-cf
  CF_API: https://api.fr.cloud.gov
  CF_USERNAME: ((((deploy-env))-cf-username))
  CF_PASSWORD: ((((deploy-env))-cf-password))
  CF_ORG: gsa-18f-federalist
  CF_SPACE: ((deploy-env))
  CF_STACK: cflinuxfs4

node-image: &node-image
  platform: linux
  image_resource:
    type: registry-image
    source:
      aws_access_key_id: ((ecr-aws-key))
      aws_secret_access_key: ((ecr-aws-secret))
      repository: pages-node-v20
      aws_region: us-gov-west-1
      tag: latest

cf-image: &cf-image
  platform: linux
  image_resource:
    type: registry-image
    source:
      aws_access_key_id: ((ecr-aws-key))
      aws_secret_access_key: ((ecr-aws-secret))
      repository: general-task
      aws_region: us-gov-west-1
      tag: latest

test: &test
  - in_parallel:
    - get: redis
      params: {save: true}
  - task: prepare
    config:
      <<: *node-image
      inputs: [name: src]
      outputs: [name: src]
      run:
        dir: src
        path: bash
        args:
          - -c
          - |
            yarn --pure-lockfile
            yarn eslint
  - task: test
    privileged: true
    file: src/ci/partials/test.yml


############################
#  JOBS

jobs:

  - name: set-pipeline
    plan:
    - get: src
      resource: pr-((git-branch))
      trigger: true
    - set_pipeline: builder
      file: src/ci/pipeline-dev.yml
      instance_vars:
        deploy-env: ((deploy-env))
        git-branch: ((git-branch))

  - name: test-and-deploy-((deploy-env))
    plan:
      - get: src
        resource: pr-((git-branch))
        passed: [set-pipeline]
        trigger: true
      - do: *test
      - task: deploy
        config:
          <<: *cf-image
          inputs: [name: src]
          run:
            dir: src
            path: ci/tasks/deploy.sh
        params:
          <<: *env-cf
          CF_APP_NAME: pages-builder-((deploy-env))
          CF_MANIFEST: .cloudgov/manifest.yml
          CF_VARS_FILE: .cloudgov/vars/pages-((deploy-env)).yml
        on_failure:
          try:
            task: cancel-api-deployment
            config:
              <<: *cf-image
              inputs: [name: src]
              run:
                dir: src
                path: ci/tasks/cancel-deployment.sh
            params:
              <<: *env-cf
              CF_APP_NAME: pages-builder-((deploy-env))
    on_failure:
      in_parallel:
        - put: slack
          params:
            text: |
              :x: FAILED: pages builder deployment on ((deploy-env))
              <$ATC_EXTERNAL_URL/teams/$BUILD_TEAM_NAME/pipelines/$BUILD_PIPELINE_NAME/jobs/$BUILD_JOB_NAME/builds/$BUILD_NAME|View build details>
            channel: ((slack-channel))
            username: ((slack-username))
            icon_url: ((slack-icon-url))
    on_success:
      in_parallel:
        - put: slack
          params:
            text: |
              :white_check_mark: SUCCESS: Successfully deployed pages builder on ((deploy-env))
              <$ATC_EXTERNAL_URL/teams/$BUILD_TEAM_NAME/pipelines/$BUILD_PIPELINE_NAME/jobs/$BUILD_JOB_NAME/builds/$BUILD_NAME|View build details>
            channel: ((slack-channel))
            username: ((slack-username))
            icon_url: ((slack-icon-url))

  - name: nightly-tasks-((deploy-env))
    plan:
      - get: src
        resource: pr-((git-branch))
        passed: [set-pipeline]
      - get: nightly
        trigger: true
      - task: restage
        config:
          <<: *cf-image
          inputs: [name: src]
          run:
            dir: src
            path: ci/tasks/restage.sh
        params:
          <<: *env-cf
          CF_APP_NAME: pages-builder-((deploy-env))

############################
#  RESOURCES

resources:

  - name: pr-((git-branch))
    type: pull-request
    check_every: 1m
    source:
      repository: ((builder-repository-path))
      access_token: ((gh-access-token))
      base_branch: ((git-branch))
      disable_forks: true
      ignore_drafts: false

  - name: nightly
    type: time
    source:
      start: 12:00 AM
      stop: 1:00 AM
      location: America/New_York

  - name: redis
    type: docker-image
    source:
      repository: redis
      tag: 5-alpine

  - name: slack
    type: slack-notification
    source:
      url: ((slack-webhook-url))

############################
#  RESOURCE TYPES

resource_types:

  - name: slack-notification
    type: registry-image
    source:
      aws_access_key_id: ((ecr_aws_key))
      aws_secret_access_key: ((ecr_aws_secret))
      repository: slack-notification-resource
      aws_region: us-gov-west-1
      tag: latest

  - name: pull-request
    type: registry-image
    source:
      aws_access_key_id: ((ecr_aws_key))
      aws_secret_access_key: ((ecr_aws_secret))
      repository: github-pr-resource
      aws_region: us-gov-west-1
      tag: latest

  - name: time
    type: registry-image
    source:
      aws_access_key_id: ((ecr_aws_key))
      aws_secret_access_key: ((ecr_aws_secret))
      repository: time-resource
      aws_region: us-gov-west-1
      tag: latest

  - name: registry-image
    type: registry-image
    source:
      aws_access_key_id: ((ecr_aws_key))
      aws_secret_access_key: ((ecr_aws_secret))
      repository: registry-image-resource
      aws_region: us-gov-west-1
      tag: latest