You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by oc...@apache.org on 2021/04/09 17:19:34 UTC

[trafficcontrol] branch master updated: Add an ORT integration tests GHA workflow (#5706)

This is an automated email from the ASF dual-hosted git repository.

ocket8888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git


The following commit(s) were added to refs/heads/master by this push:
     new 6e5870d  Add an ORT integration tests GHA workflow (#5706)
6e5870d is described below

commit 6e5870d72e3f6cb0c8ec5379569c6460f3a80ad3
Author: John J. Rushford <jr...@apache.org>
AuthorDate: Fri Apr 9 11:19:20 2021 -0600

    Add an ORT integration tests GHA workflow (#5706)
---
 .github/actions/build-ats-test-rpm/README.md       |  35 +++++
 .github/actions/build-ats-test-rpm/action.yaml     |  22 +++
 .github/actions/build-ats-test-rpm/main.js         |  41 ++++++
 .github/actions/fetch-github-branch-sha/Dockerfile |  25 ++++
 .github/actions/fetch-github-branch-sha/README.md  |  45 ++++++
 .github/actions/fetch-github-branch-sha/action.yml |  40 ++++++
 .../actions/fetch-github-branch-sha/entrypoint.sh  |  55 +++++++
 .github/actions/to-ort-integration-tests/README.md |  75 ++++++++++
 .../actions/to-ort-integration-tests/action.yml    |  22 +++
 .github/actions/to-ort-integration-tests/main.js   |  34 +++++
 .github/workflows/traffic-ops-ort-tests.yml        | 160 +++++++++++++++++++++
 traffic_ops_ort/testing/README.md                  |  46 +++---
 .../testing/docker/docker-compose-ats-build.yml    |  35 +++++
 traffic_ops_ort/testing/docker/docker-compose.yml  |   1 +
 traffic_ops_ort/testing/docker/ort_test/Dockerfile |   6 +-
 traffic_ops_ort/testing/docker/ort_test/run.sh     |  35 ++++-
 .../testing/docker/traffic_ops/Dockerfile          |   6 +-
 .../testing/docker/trafficserver/Dockerfile        |  60 ++++++++
 .../testing/docker/trafficserver/run.sh            |  78 ++++++++++
 .../docker/trafficserver/trafficserver-8.spec      |  61 +++-----
 .../docker/trafficserver/trafficserver-9.spec      |  63 +++-----
 traffic_server/_tsb/trafficserver.spec             |   1 +
 22 files changed, 831 insertions(+), 115 deletions(-)

diff --git a/.github/actions/build-ats-test-rpm/README.md b/.github/actions/build-ats-test-rpm/README.md
new file mode 100644
index 0000000..089b75d
--- /dev/null
+++ b/.github/actions/build-ats-test-rpm/README.md
@@ -0,0 +1,35 @@
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+
+# build-ats-test-rpm JavaScript action
+
+This action runs the builds RPMs for the various Traffic Control components.
+
+## Inputs
+None
+
+## Outputs
+### `exit-code`
+
+0 on success, non-zero otherwise
+
+## Example usage
+```yaml
+uses: .github/actions/build-rpms
+```
diff --git a/.github/actions/build-ats-test-rpm/action.yaml b/.github/actions/build-ats-test-rpm/action.yaml
new file mode 100644
index 0000000..45ff7b3
--- /dev/null
+++ b/.github/actions/build-ats-test-rpm/action.yaml
@@ -0,0 +1,22 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+name: 'build-ats-test-rpm'
+description: 'Builds an ATS RPM used for ORT Integration tests.'
+runs:
+  using: 'node12'
+  main: 'main.js'
diff --git a/.github/actions/build-ats-test-rpm/main.js b/.github/actions/build-ats-test-rpm/main.js
new file mode 100644
index 0000000..f1fc8cd
--- /dev/null
+++ b/.github/actions/build-ats-test-rpm/main.js
@@ -0,0 +1,41 @@
+/*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+"use strict";
+const child_process = require("child_process");
+const spawnOptions = {
+	stdio: "inherit",
+	stderr: "inherit",
+};
+
+let atcComponent = process.env.ATC_COMPONENT;
+const dockerCompose = ["docker-compose", "-f", `${process.env.GITHUB_WORKSPACE}/traffic_ops_ort/testing/docker/docker-compose-ats-build.yml`];
+if (typeof atcComponent !== "string" || atcComponent.length === 0) {
+	console.error("Missing environment variable ATC_COMPONENT");
+	process.exit(1);
+}
+atcComponent += "_build";
+
+function runProcess(...commandArguments) {
+	console.info(...commandArguments);
+	const status = child_process.spawnSync(commandArguments[0], commandArguments.slice(1), spawnOptions).status;
+	if (status === 0) {
+		return;
+	}
+	console.error("Child process \"", ...commandArguments, "\" exited with status code", status, "!");
+	process.exit(status ? status : 1);
+}
+
+runProcess(...dockerCompose, "pull", atcComponent);
+runProcess(...dockerCompose, "run", atcComponent);
diff --git a/.github/actions/fetch-github-branch-sha/Dockerfile b/.github/actions/fetch-github-branch-sha/Dockerfile
new file mode 100644
index 0000000..98ccfd6
--- /dev/null
+++ b/.github/actions/fetch-github-branch-sha/Dockerfile
@@ -0,0 +1,25 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# alpine:3.13
+FROM alpine@sha256:08d6ca16c60fe7490c03d10dc339d9fd8ea67c6466dea8d558526b1330a85930
+
+RUN apk add --no-cache bash git curl
+
+COPY entrypoint.sh /
+
+ENTRYPOINT /entrypoint.sh
diff --git a/.github/actions/fetch-github-branch-sha/README.md b/.github/actions/fetch-github-branch-sha/README.md
new file mode 100644
index 0000000..5d7a559
--- /dev/null
+++ b/.github/actions/fetch-github-branch-sha/README.md
@@ -0,0 +1,45 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+# fetch-github-branch-sha docker action
+This action queries for the latest git commit 
+sha on a github repo branch
+
+## Outputs
+
+### `sha` and `exit-code`
+the commit sha from a github repo branch
+0 if the tests passed, 1 otherwise.
+
+## Example usage
+```yaml
+jobs:
+  tests:
+    runs-on: ubuntu-latest
+
+    steps:
+      - name: Checkout
+        uses: actions/checkout@master
+      - name: Fetch GitHub commit
+        uses: ./.github/actions/fetch-github-branch-sha
+          with:
+            - owner: apache
+            - repo: trafficserver
+            - branch: 8.1.x
+```
diff --git a/.github/actions/fetch-github-branch-sha/action.yml b/.github/actions/fetch-github-branch-sha/action.yml
new file mode 100644
index 0000000..ac4e505
--- /dev/null
+++ b/.github/actions/fetch-github-branch-sha/action.yml
@@ -0,0 +1,40 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+name: 'fetch-github-branch-sha'
+description: 'Fetches the most recent commit from a github repository branch'
+inputs:
+  owner:  
+    description: 'The owner of the github repository ie, "apache"'
+    required: true
+  repo:  
+    description: 'The owners github repository ie, "trafficcontrol"'
+    required: true
+  branch: 
+    description: 'The repository branch to query ie, "8.1.0-branch"'
+    required: true
+outputs:
+  sha:
+    description: 'The latest git commit sha'
+runs:
+  using: 'docker'
+  image:  'Dockerfile'
+  args:
+    - ${{ inputs.owner }}
+    - ${{ inputs.repo }}
+    - ${{ inputs.branch }}
+
diff --git a/.github/actions/fetch-github-branch-sha/entrypoint.sh b/.github/actions/fetch-github-branch-sha/entrypoint.sh
new file mode 100755
index 0000000..a4fda07
--- /dev/null
+++ b/.github/actions/fetch-github-branch-sha/entrypoint.sh
@@ -0,0 +1,55 @@
+#!/bin/bash
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+# verify required environment inputs.
+if [[ -z ${INPUT_OWNER} || -z ${INPUT_REPO} || -z ${INPUT_BRANCH} ]]; then
+  echo "Error: missing required environment variables"
+  exit 1
+fi
+
+# fetch the branch info
+_brinfo=`curl --silent https://api.github.com/repos/${INPUT_OWNER}/${INPUT_REPO}/branches/${INPUT_BRANCH}`
+_rc=$?
+
+if [[ ${_rc} -ne 0 ]]; then
+  echo "Error: failed to fetch branch info ${INPUT_BRANCH}"
+  exit 2
+fi
+
+# parse out the commit sha
+_sha=`echo -E ${_brinfo} | awk '{
+  if ($0 ~ /Branch not found/) {
+    print "BADBRANCH"
+  } 
+  else if ($0 ~ /name/) {
+    print $7
+  }
+}' | sed -e 's/[",]//g'`
+
+# verify the sha
+if [[ -z ${_sha} || ${_sha} == "BADBRANCH" ]]; then
+  echo "Error: could not parse the commit from branch ${INPUT_BRANCH}"
+  exit 3
+fi
+
+echo "::set-output name=sha::${_sha}"
+
+exit 0
+
diff --git a/.github/actions/to-ort-integration-tests/README.md b/.github/actions/to-ort-integration-tests/README.md
new file mode 100644
index 0000000..9d75896
--- /dev/null
+++ b/.github/actions/to-ort-integration-tests/README.md
@@ -0,0 +1,75 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+# to-ort-integration-tests JavaScript action
+This action runs the Traffic Ops ORT integration tests with the Traffic Ops API.
+- Provides a Riak server at address `trafficvault.infra.ciab.test`
+
+## Inputs
+
+### `Trafficserver RPM`
+**Required** A trafficserver RPM used to install on the Edge server.
+
+## Outputs
+
+### `exit-code`
+1 if the Go program(s) could be built successfully.
+
+## Example usage
+```yaml
+jobs:
+  tests:
+    runs-on: ubuntu-latest
+
+    services:
+      postgres:
+        image: postgres:11.9
+        env:
+          POSTGRES_USER: traffic_ops
+          POSTGRES_PASSWORD: twelve
+          POSTGRES_DB: traffic_ops
+        ports:
+        - 5432:5432
+        options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
+
+      smtp:
+        image: maildev/maildev:2.0.0-beta3
+        ports:
+          - 25:25
+        options: >-
+          --entrypoint=bin/maildev
+          --user=root
+          --health-cmd="sh -c \"[[ \$(wget -qO- http://smtp/healthz) == true ]]\""
+          --
+          maildev/maildev:2.0.0-beta3
+          --smtp=25
+          --hide-extensions=STARTTLS
+          --web=80
+
+    steps:
+      - name: Checkout
+        uses: actions/checkout@master
+      - name: initialize database
+        uses: ./.github/actions/todb-init
+      - name: Run API v5 tests
+        uses: ./.github/actions/to-integration-tests
+        with:
+          version: 5
+          smtp_address: localhost
+```
diff --git a/.github/actions/to-ort-integration-tests/action.yml b/.github/actions/to-ort-integration-tests/action.yml
new file mode 100644
index 0000000..40aac7e
--- /dev/null
+++ b/.github/actions/to-ort-integration-tests/action.yml
@@ -0,0 +1,22 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+name: 'to-ort-integration-tests'
+description: 'Runs Traffic Ops ORT integration tests'
+runs:
+  using: 'node12'
+  main: 'main.js'
diff --git a/.github/actions/to-ort-integration-tests/main.js b/.github/actions/to-ort-integration-tests/main.js
new file mode 100644
index 0000000..6a0bf21
--- /dev/null
+++ b/.github/actions/to-ort-integration-tests/main.js
@@ -0,0 +1,34 @@
+/*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+"use strict";
+const child_process = require("child_process");
+const spawnOptions = {
+	stdio: "inherit",
+	stderr: "inherit",
+};
+
+const dockerCompose = ["docker-compose", "-f", `${process.env.GITHUB_WORKSPACE}/traffic_ops_ort/testing/docker/docker-compose.yml`];
+
+function runProcess(...commandArguments) {
+	console.info(...commandArguments);
+	const status = child_process.spawnSync(commandArguments[0], commandArguments.slice(1), spawnOptions).status;
+	if (status === 0) {
+		return;
+	}
+	console.error("Child process \"", ...commandArguments, "\" exited with status code", status, "!");
+	process.exit(status ? status : 1);
+}
+
+runProcess(...dockerCompose, "run", "ort_test");
diff --git a/.github/workflows/traffic-ops-ort-tests.yml b/.github/workflows/traffic-ops-ort-tests.yml
new file mode 100644
index 0000000..4185cac
--- /dev/null
+++ b/.github/workflows/traffic-ops-ort-tests.yml
@@ -0,0 +1,160 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+name: Traffic Ops ORT integration tests
+
+on: 
+  push:
+  workflow_dispatch:
+    paths:
+      - .github/workflows/traffic-ops-ort-tests.yml
+      - go.mod
+      - go.sum
+      - GO_VERSION
+      - traffic_ops/*client/**.go
+      - traffic_ops/traffic_ops_golang/**.go
+      - traffic_ops_ort/**.go
+      - vendor/**.go
+      - vendor/modules.txt
+      - .github/actions/build-ats-test-rpm
+      - .github/actions/fetch-github-branch-sha
+      - .github/actions/to-ort-integration-tests
+  create:
+  pull_request:
+    paths:
+      - .github/workflows/traffic-ops-ort-tests.yml
+      - go.mod
+      - go.sum
+      - GO_VERSION
+      - traffic_ops/*client/**.go
+      - traffic_ops/traffic_ops_golang/**.go
+      - traffic_ops_ort/**.go
+      - vendor/**.go
+      - vendor/modules.txt
+      - .github/actions/build-ats-test-rpm
+      - .github/actions/fetch-github-branch-sha
+      - .github/actions/to-ort-integration-tests
+    types: [opened, reopened, ready_for_review, synchronize]
+
+jobs:
+
+  traffic_ops:
+    if: github.event.pull_request.draft == false
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout
+        uses: actions/checkout@v2
+      - name: Build RPM
+        uses: ./.github/actions/build-rpms
+        env:
+          ATC_COMPONENT: ${{ github.job }}
+      - name: Upload RPM
+        uses: actions/upload-artifact@v2
+        with:
+          name: ${{ github.job }}
+          path: ${{ github.workspace }}/dist/${{ github.job }}-*.x86_64.rpm
+
+  traffic_ops_ort:
+    if: github.event.pull_request.draft == false
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout
+        uses: actions/checkout@v2
+      - name: Build RPM
+        uses: ./.github/actions/build-rpms
+        env:
+          ATC_COMPONENT: ${{ github.job }}
+      - name: Upload RPM
+        uses: actions/upload-artifact@v2
+        with:
+          name: ${{ github.job }}
+          path: ${{ github.workspace }}/dist/${{ github.job }}-*.x86_64.rpm
+    
+  trafficserver:
+    if: github.event.pull_request.draft == false
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout
+        uses: actions/checkout@v2
+      - name: Get commit sha
+        uses: ./.github/actions/fetch-github-branch-sha
+        with:
+          owner: apache
+          repo: trafficserver
+          branch: 8.1.x
+        id: git-repo-sha
+      - name: Display SHA
+        run: echo "${{ steps.git-repo-sha.outputs.sha }}"
+      - name: Check Cache
+        id: ats-rpm-cache
+        uses: actions/cache@v2
+        with:
+          path: ${{ github.workspace }}/dist
+          key: ${{ steps.git-repo-sha.outputs.sha }}
+      - name: Build ATS RPM
+        if: steps.ats-rpm-cache.outputs.cache-hit != 'true'
+        uses: ./.github/actions/build-ats-test-rpm
+        env:
+          ATC_COMPONENT: ${{ github.job }}
+      - name: Display structure of dist directory
+        run: ls -lR
+        working-directory: ${{ github.workspace }}/dist
+      - name: Upload RPM
+        uses: actions/upload-artifact@v2
+        with:
+          name: ${{ github.job }}
+          path: ${{ github.workspace }}/dist/${{ github.job }}-*.x86_64.rpm
+
+  ORT_tests:
+    if: github.event.pull_request.draft == false
+    runs-on: ubuntu-latest
+    needs: 
+      - traffic_ops
+      - traffic_ops_ort
+      - trafficserver
+
+    steps:
+    - name: Checkout
+      uses: actions/checkout@master
+    - name: Download TO RPM
+      uses: actions/download-artifact@v2
+      with:
+        name: traffic_ops
+        path: ${{ github.workspace }}/traffic_ops_ort/testing/docker/traffic_ops
+    - name: Display structure of TO downloaded files
+      run: ls -lR
+      working-directory: ${{ github.workspace }}/traffic_ops_ort/testing/docker/traffic_ops
+    - name: Download ORT RPM
+      uses: actions/download-artifact@v2
+      with:
+        name: traffic_ops_ort
+        path: ${{ github.workspace }}/traffic_ops_ort/testing/docker/ort_test
+    - name: Display structure of ORT downloaded files
+      run: ls -lR
+      working-directory: ${{ github.workspace }}/traffic_ops_ort/testing/docker/ort_test
+    - name: Download ATS RPM
+      uses: actions/download-artifact@v2
+      with:
+        name: trafficserver
+        path: ${{ github.workspace }}/traffic_ops_ort/testing/docker/yumserver/test-rpms
+    - name: Display structure of ATS downloaded files
+      run: ls -lR
+      working-directory: ${{ github.workspace }}/traffic_ops_ort/testing/docker/yumserver
+    - name: Build ORT test containers
+      run: docker-compose -f ${{ github.workspace }}/traffic_ops_ort/testing/docker/docker-compose.yml build --parallel
+    - name: Run ORT integration tests
+      uses: ./.github/actions/to-ort-integration-tests
diff --git a/traffic_ops_ort/testing/README.md b/traffic_ops_ort/testing/README.md
index aff7348..81e8e4d 100644
--- a/traffic_ops_ort/testing/README.md
+++ b/traffic_ops_ort/testing/README.md
@@ -25,6 +25,16 @@ are able to communicate with Traffic Ops, install required
 packages and generate the correct ATS configuration files on
 a Trafficserver cache.
 
+# Automated Github Actions workflow
+
+A Github actions workflow, **traffic-ops-ort-tests.yml**, has 
+been written to fully automate running the tests upon github
+code pushes and PR submissions on code changes that might affect
+ORT.  In addition, the tests may be triggered manually through
+the Github actions UI.
+
+# Running the tests manually.
+
 The first thing you need do is to provide the Traffic Ops and
 Traffic Ops ORT RPM files for the build you wish to test using 
 this framework.  This test environment provides the necessary
@@ -49,29 +59,28 @@ Docker containers you will need to provide the following resources:
 
 # Setup.
 
-  1.  Build the Traffic Ops and Traffic Ops ORT RPM's that you wish
-      to test.  See the top level 'build' directory for building 
-      instructions. 
-  2.  Copy the Traffic Ops RPM to docker/traffic_ops/traffic_ops.rpm
-      (NOTE:  Use the file name 'traffic_ops.rpm')
-  3.  Copy the Traffic Ops ORT rpm to docker/ort_test/traffic_ops_ort.rpm
-      (NOTE:  Use the file name 'traffic_ops_ort.rpm'
-  4.  Copy an Apache Trafficserver rpm to 
-      docker/yumserver/test-rpms/trafficserver-$VERSION.$COMMIT-HASH.el7.x86_64.rpm
-      You will need to edit and adjust the trafficserver package value in
-      ort-tests/tc-fixtures.json to match the $VERSION.$COMMIT-HASH used in the name
-      of your RPM.  Search for 'CHANGEME' in the ort-tests/tc-fixtures.json 
-      and change the value to match the RPM version you choose to use.
-      For example, '8.0.8-19.77cb23a.el7.x86_64' and therefore the rpm file expected in 
-      'docker/yumserver/test-rpms' is 'trafficserver-8.0.8-19.77cb23a.el7.x86_64.rpm'.
-  6.  The container Docker files have the usernames and passwords used in the various
+  1.  Build the Traffic Ops and Traffic Ops ORT RPM's on the branch 
+      that you wish to test.  See the top level 'build' directory for 
+      building instructions. 
+  2.  Copy the Traffic Ops RPM from the 'dist' directory to 
+      docker/traffic_ops/, no renaming is required.
+  3.  Copy the Traffic Ops ORT rpm from the 'dist' directory to 
+      docker/ort_test/, no renaming is required.
+  4.  You may copy an Apache Trafficserver RPM to the 
+      docker/yumserver/test-rpms directory or you can run:
+
+      **docker-compose -f docker-compose-ats.yml run trafficserver_build**
+
+      to build an rpm which is copied to docker/yumserver/test-rpms.
+
+  5.  The container Docker files have the usernames and passwords used in the various
       containers ie, postgresql db, traffic_ops, and traffic_ops_ort.  The usernames
       and passwords passed to the 't3c' executable in in the 
       ort-tests/conf/docker-edge-cache.conf file.  Make sure that the usernames/passwords
       in the Docker files match those in the t3c configuration file.
       An example ort-tests/conf/edge-cache.conf file is provided should you choose to
       use your own Traffic Ops and Postgresql environment.
-  7.  Build the Docker images and run the ort test:
+  6.  Build the Docker images and run the ort test:
       ``` 
       cd trafficcontrol/traffic_ops_ort/testing/docker
       docker-compose build
@@ -93,7 +102,8 @@ Docker containers you will need to provide the following resources:
   file with the necessary login information in the 'conf' directory and then rerun
   the tests using your config file.  WARNING: the traffic ops database will be dropped
   and initialized using the data in tc-fixtures.json and then the tests are run.  
-  DO NOT USE a production Traffic Ops database with these test scripts.
+  
+  **DO NOT USE a production Traffic Ops database with these test scripts.**
 
 
  
diff --git a/traffic_ops_ort/testing/docker/docker-compose-ats-build.yml b/traffic_ops_ort/testing/docker/docker-compose-ats-build.yml
new file mode 100644
index 0000000..ba5343e
--- /dev/null
+++ b/traffic_ops_ort/testing/docker/docker-compose-ats-build.yml
@@ -0,0 +1,35 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+#
+
+---
+version: '2'
+
+volumes:
+  trafficcontrol:
+
+services:
+
+  trafficserver_build:
+    environment:
+      - ATS_VERSION=8.1.x
+    build:
+      context: ../../..
+      dockerfile: traffic_ops_ort/testing/docker/trafficserver/Dockerfile
+    volumes:
+      - ../../..:/trafficcontrol:z
diff --git a/traffic_ops_ort/testing/docker/docker-compose.yml b/traffic_ops_ort/testing/docker/docker-compose.yml
index e95bf9e..440f43b 100644
--- a/traffic_ops_ort/testing/docker/docker-compose.yml
+++ b/traffic_ops_ort/testing/docker/docker-compose.yml
@@ -89,6 +89,7 @@ services:
       - traffic_vault
     volumes:
       - ../../..:/root/go/src/github.com/apache/trafficcontrol
+      - ./yumserver:/yumserver
 
   yumserver:
     build:
diff --git a/traffic_ops_ort/testing/docker/ort_test/Dockerfile b/traffic_ops_ort/testing/docker/ort_test/Dockerfile
index c5dc46f..df0dccc 100644
--- a/traffic_ops_ort/testing/docker/ort_test/Dockerfile
+++ b/traffic_ops_ort/testing/docker/ort_test/Dockerfile
@@ -36,12 +36,12 @@ RUN yum install -y \
   epel-release initscripts postgresql13.x86_64 git gcc lua-5.1.4-15.el7 lua-devel-5.1.4-15.el7 \
   ImageMagick-c++-devel
 
-ARG RPM=traffic_ops_ort.rpm
-ADD ort_test/$RPM /
-RUN yum install -y /$(basename $RPM)
+ADD ort_test/traffic_ops_ort*.rpm /traffic_ops_ort.rpm
+RUN yum install -y /traffic_ops_ort.rpm
 
 RUN sed -i 's/HOME\/bin/HOME\/bin:\/usr\/local\/go\/bin:/g' /root/.bash_profile
 RUN echo "GOPATH=/root/go; export GOPATH" >> /root/.bash_profile
+RUN echo "StrictHostKeyChecking no" >> /etc/ssh/ssh_config
 RUN mkdir /root/go
 RUN mkdir -p /opt/ort/status
 
diff --git a/traffic_ops_ort/testing/docker/ort_test/run.sh b/traffic_ops_ort/testing/docker/ort_test/run.sh
index 82e3b92..c807357 100755
--- a/traffic_ops_ort/testing/docker/ort_test/run.sh
+++ b/traffic_ops_ort/testing/docker/ort_test/run.sh
@@ -38,7 +38,6 @@ function ping_to {
 		"--run-mode=badass" 
 }
 
-set -x
 GOPATH=/root/go; export GOPATH
 PATH=$PATH:/usr/local/go/bin:; export PATH
 TERM=xterm; export TERM
@@ -55,26 +54,48 @@ if [ -f /trafficcontrol/GO_VERSION ]; then
         rm go.tar.gz
 else
   echo "no GO_VERSION file, unable to install go"
-  exit 0
+  exit 1
 fi
 
 # fetch dependent packages for tests
 go mod vendor -v
 
-if [ -f /systemctl.sh ]; then
+if [[ -f /systemctl.sh ]]; then
   mv /bin/systemctl /bin/systemctl.save
   cp /systemctl.sh /bin/systemctl
   chmod 0755 /bin/systemctl
 fi
 
 cd /ort-tests
-echo "Sleeping for $WAIT seconds to ensure all containers have initialized" >> test.log
-sleep $WAIT
-echo "Running tests" >> test.log
+go get -u ./...
+cp /ort-tests/tc-fixtures.json /tc-fixtures.json
+ATS_RPM=`basename /yumserver/test-rpms/trafficserver-*.rpm |
+  gawk 'match($0, /trafficserver\-(.+)\.rpm$/, arr) {print arr[1]}'`
+
+echo "ATS_RPM: $ATS_RPM"
+
+if [[ -z $ATS_RPM ]]; then
+  echo "ERROR: No ATS RPM was found"
+  exit 2
+else
+  sed -i -e "s/CHANGEME/$ATS_RPM/" /ort-tests/tc-fixtures.json
+fi
 
 # wake up the to_server
 ping_to
-sleep 2
 
+echo "waiting $WAIT seconds for all containers to initialize."
+sleep $WAIT
+
+cp /ort-tests/tc-fixtures.json /tc-fixtures.json
 (touch test.log && tail -f test.log)&
+
 go test -v -failfast -cfg=conf/docker-edge-cache.conf 2>&1 >> test.log
+if [[ $? != 0 ]]; then
+  echo "ERROR: ORT tests failure"
+  exit 3
+fi
+
+cp /tc-fixtures.json /ort-tests/tc-fixtures.json
+
+exit 0
diff --git a/traffic_ops_ort/testing/docker/traffic_ops/Dockerfile b/traffic_ops_ort/testing/docker/traffic_ops/Dockerfile
index d3c5b01..6430a8f 100644
--- a/traffic_ops_ort/testing/docker/traffic_ops/Dockerfile
+++ b/traffic_ops_ort/testing/docker/traffic_ops/Dockerfile
@@ -75,11 +75,7 @@ WORKDIR /opt/traffic_ops/app
 ADD traffic_ops/install/bin/install_goose.sh ./
 RUN ./install_goose.sh && rm ./install_goose.sh && dnf -y remove git && dnf clean all
 
-# Override TRAFFIC_OPS_RPM arg to use a different one using --build-arg TRAFFIC_OPS_RPM=...  Can be local file or http://...
-#
-ARG TRAFFIC_OPS_RPM=traffic_ops_ort/testing/docker/traffic_ops/traffic_ops.rpm
-
-COPY $TRAFFIC_OPS_RPM /traffic_ops.rpm
+ADD traffic_ops_ort/testing/docker/traffic_ops/traffic_ops*.rpm /traffic_ops.rpm
 RUN yum -y install /traffic_ops.rpm && \
 	rm /traffic_ops.rpm
 
diff --git a/traffic_ops_ort/testing/docker/trafficserver/Dockerfile b/traffic_ops_ort/testing/docker/trafficserver/Dockerfile
new file mode 100644
index 0000000..ca6c14e
--- /dev/null
+++ b/traffic_ops_ort/testing/docker/trafficserver/Dockerfile
@@ -0,0 +1,60 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+###############################################################
+# Dockerfile to build Traffic Server RPM
+# Based on CentOS 7 for ATS RPM ot match the ort_test 
+# container running CentOS 7.
+###############################################################
+
+FROM centos:7
+VOLUME /atsbuild
+
+# install the required yum repo
+RUN yum install -y centos-release-scl 
+# install the required toolsets
+RUN yum install -y \
+  autoconf \
+  automake \
+  curses \
+  curl \
+  devtoolset-9 \
+  flex \
+  git \
+  hwloc \
+  hwloc-devel \
+  libtool \
+  libcap \
+  libcap-devel \
+  lua \
+  make \
+  openssl \
+  openssl-devel \
+  pcre \
+  pcre-devel \
+  pkgconfig \
+  python3 \
+  redhat-rpm-config \
+  rpm-build \
+  tcl \
+  tcl-devel
+
+ADD traffic_ops_ort/testing/docker/trafficserver/trafficserver-8.spec /trafficserver-8.spec 
+ADD traffic_ops_ort/testing/docker/trafficserver/trafficserver-9.spec /trafficserver-9.spec 
+ADD traffic_ops_ort/testing/docker/trafficserver/run.sh /
+
+ENTRYPOINT /run.sh
diff --git a/traffic_ops_ort/testing/docker/trafficserver/run.sh b/traffic_ops_ort/testing/docker/trafficserver/run.sh
new file mode 100755
index 0000000..a5bfd7f
--- /dev/null
+++ b/traffic_ops_ort/testing/docker/trafficserver/run.sh
@@ -0,0 +1,78 @@
+#!/bin/bash
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+function initBuildArea() {
+  cd /root
+
+  # prep build environment
+  [ -e rpmbuild ] && rm -rf rpmbuild
+  [ ! -e rpmbuild ] || { echo "Failed to clean up rpm build directory 'rpmbuild': $?" >&2; exit 1; }
+  mkdir -p rpmbuild/{BUILD,BUILDROOT,RPMS,SPECS,SOURCES,SRPMS} || { echo "Failed to create build directory '$RPMBUILD': $?" >&2;
+  exit 1; }
+}
+
+case ${ATS_VERSION:0:1} in
+  8) cp /trafficserver-8.spec /trafficserver.spec
+     ;;
+  9) cp /trafficserver-9.spec /trafficserver.spec
+     ;;
+  *) echo "Unknown trafficserver version was specified"
+     exit 1
+     ;;
+esac
+
+echo "Building a RPM for ATS version: $ATS_VERSION"
+
+# add the 'ats' user
+id ats &>/dev/null || /usr/sbin/useradd -u 176 -r ats -s /sbin/nologin -d /
+
+# setup the environment to use the devtoolset-9 tools.
+source scl_source enable devtoolset-9 
+
+initBuildArea
+
+cd /root/rpmbuild/SOURCES
+# clone the trafficserver repo
+git clone https://github.com/apache/trafficserver.git
+
+# build trafficserver version 9
+rm -f /root/rpmbuild/RPMS/x86_64/trafficserver-*.rpm
+cd trafficserver
+git fetch --all
+git checkout $ATS_VERSION
+rpmbuild -bb /trafficserver.spec
+
+echo "Build completed"
+
+if [[ ! -d /trafficcontrol/dist ]]; then
+  mkdir /trafficcontrol/dist
+fi
+
+case ${ATS_VERSION:0:1} in
+  8) cp /root/rpmbuild/RPMS/x86_64/trafficserver-8*.rpm /trafficcontrol/dist
+     ;;
+  9) cp /root/rpmbuild/RPMS/x86_64/trafficserver-8*.rpm /trafficcontrol/dist
+     ;;
+  *) echo "Unknown trafficserver version was specified"
+     exit 1
+     ;;
+esac 
+
+
diff --git a/traffic_server/_tsb/trafficserver.spec b/traffic_ops_ort/testing/docker/trafficserver/trafficserver-8.spec
similarity index 66%
copy from traffic_server/_tsb/trafficserver.spec
copy to traffic_ops_ort/testing/docker/trafficserver/trafficserver-8.spec
index 79d71fc..e871553 100644
--- a/traffic_server/_tsb/trafficserver.spec
+++ b/traffic_ops_ort/testing/docker/trafficserver/trafficserver-8.spec
@@ -16,70 +16,57 @@
 # under the License.
 #
 # SPDX-License-Identifier: Apache-2.0
-
-%global src %{_topdir}/SOURCES/src
+#
+%global src %{_topdir}/SOURCES/trafficserver
 %global git_args --git-dir="%{src}/.git" --work-tree="%{src}"
-%global tag %(git %{git_args} describe --long |      sed 's/^\\\(.*\\\)-\\\([0-9]\\\+\\\)-g\\\([0-9a-f]\\\+\\\)$/\\\1/' | sed 's/-/_/')
+%global git_tag %(git %{git_args} describe --long | sed 's/^\\\(.*\\\)-\\\([0-9]\\\+\\\)-g\\\([0-9a-f]\\\+\\\)$/\\\1/' | sed 's/-/_/')
 %global distance %(git %{git_args} describe --long | sed 's/^\\\(.*\\\)-\\\([0-9]\\\+\\\)-g\\\([0-9a-f]\\\+\\\)$/\\\2/')
-%global commit %(git %{git_args} describe --long |   sed 's/^\\\(.*\\\)-\\\([0-9]\\\+\\\)-g\\\([0-9a-f]\\\+\\\)$/\\\3/')
+%global commit %(git %{git_args} describe --long | sed 's/^\\\(.*\\\)-\\\([0-9]\\\+\\\)-g\\\([0-9a-f]\\\+\\\)$/\\\3/')
 %global git_serial %(git %{git_args} rev-list HEAD | wc -l)
 %global install_prefix "/opt"
 %global api_stats "4096"
 %global _find_debuginfo_dwz_opts %{nil}
-%{!?_with_openssl_included: %{!?_without_openssl_included: %define _without_openssl_included --without-openssl_included}}
-%{?_with_openssl_included: %{?_without_openssl_included: %{error: both _with_openssl_included and _without_openssl_included}}}
-%{!?_with_openssl_included: %{!?_without_openssl_included: %{error: neither _with_openssl_included nor _without_openssl_included}}}
-%{?_without_openssl_included:BuildRequires: openssl-devel}
+
+%global min_tag 8.1.0
+%global tag %(echo -e '%{min_tag}\\n%{git_tag}' | sort | tail -n 1 )
 
 Name:		trafficserver
 Version:	%{tag}
 Epoch:		%{git_serial}
 Release:	%{distance}.%{commit}%{?dist}
 Summary:	Apache Traffic Server
-Vendor:		Apache
+Packager:	ORT integration tests.
+Vendor:		IPCDN
 Group:		Applications/Communications
 License:	Apache License, Version 2.0
-URL:		https://github.com/apache/trafficserver
+URL:		  https://github.com/apache/trafficcontrol
 BuildRoot:	%(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
-Requires:	tcl, hwloc, pcre, libcap
-BuildRequires:	autoconf, automake, libtool, gcc-c++, glibc-devel, expat-devel, pcre, libcap-devel, pcre-devel, perl-ExtUtils-MakeMaker, tcl-devel, hwloc-devel
-Source: src
+Requires:	tcl, hwloc, pcre, libcap, brotli, libmaxminddb, openssl
+BuildRequires:	autoconf, automake, devtoolset-9 libtool, pcre, libcap-devel, pcre-devel
+Source: trafficserver
 
 %description
-Apache Traffic Server with Apache Traffic Control modifications and environment specific modifications
+Apache Traffic Server with Comcast modifications and environment specific modifications
 
 %prep
 %setup -c -T
 cp -far %{src}/. .
-cp -far %{src}/../traffic_server_jemalloc ..
 autoreconf -vfi
 
 %build
-%if %{?_with_openssl_included:1}%{!?_with_openssl_included:0}
-./configure --with-openssl=/opt/trafficserver/openssl --prefix=%{install_prefix}/%{name} --with-user=ats --with-group=ats --with-build-number=%{release} --enable-experimental-plugins --with-max-api-stats=%{api_stats} --disable-unwind
-%else
-./configure --prefix=%{install_prefix}/%{name} --with-user=ats --with-group=ats --with-build-number=%{release} --enable-experimental-plugins --with-max-api-stats=%{api_stats} --disable-unwind
-%endif
+./configure --with-openssl=/usr --prefix=%{install_prefix}/%{name} --with-user=ats --with-group=ats --with-build-number=%{release} --enable-experimental-plugins --with-max-api-stats=%{api_stats} --disable-unwind
 make %{?_smp_mflags}
-%if %{?_with_openssl_included:1}%{!?_with_openssl_included:0}
-export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/trafficserver/openssl/lib:/usr/local/lib
-%else
-export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
-%endif
-make %{?_smp_mflags} check || ( cat ./test-suite.log; exit 1 )
+make %{?_smp_mflags} 
 
 %install
 make DESTDIR=$RPM_BUILD_ROOT install
+# WARNING!  Don't build a RPM on a 'real' (ats server) box
+# Totally ghetto, but ATS build scripts aren't RPM (DESTDIR=$RPM_BUILD_ROOT, etc) compliant
+# ..so why haven't we fixed them? VSSCDNENG-767
 
 mkdir -p $RPM_BUILD_ROOT/opt/trafficserver/etc/trafficserver/snapshots
 mkdir -p $RPM_BUILD_ROOT/usr/lib/systemd/system
 cp rc/trafficserver.service $RPM_BUILD_ROOT/usr/lib/systemd/system/
-cp ../traffic_server_jemalloc $RPM_BUILD_ROOT/opt/trafficserver/bin/
-
-%if %{?_with_openssl_included:1}%{!?_with_openssl_included:0}
-mkdir -p $RPM_BUILD_ROOT/opt/trafficserver/openssl
-cp -r /opt/trafficserver/openssl/lib $RPM_BUILD_ROOT/opt/trafficserver/openssl/lib
-%endif
 
 %clean
 rm -rf $RPM_BUILD_ROOT
@@ -112,13 +99,9 @@ if [ "$1" = "0" ]; then
 fi
 
 %files
-%license LICENSE
 %defattr(-,root,root)
 %attr(644,-,-) /usr/lib/systemd/system/trafficserver.service
 %dir /opt/trafficserver
-%if %{?_with_openssl_included:1}%{!?_with_openssl_included:0}
-/opt/trafficserver/openssl
-%endif
 /opt/trafficserver/bin
 /opt/trafficserver/include
 /opt/trafficserver/lib
@@ -141,18 +124,14 @@ fi
 %config(noreplace) %attr(644,ats,ats) /opt/trafficserver/etc/trafficserver/plugin.config
 %config(noreplace) %attr(644,ats,ats) /opt/trafficserver/etc/trafficserver/records.config
 %config(noreplace) %attr(644,ats,ats) /opt/trafficserver/etc/trafficserver/remap.config
+%config(noreplace) %attr(644,ats,ats) /opt/trafficserver/etc/trafficserver/ssl_server_name.yaml
 %config(noreplace) %attr(644,ats,ats) /opt/trafficserver/etc/trafficserver/socks.config
 %config(noreplace) %attr(644,ats,ats) /opt/trafficserver/etc/trafficserver/splitdns.config
 %config(noreplace) %attr(644,ats,ats) /opt/trafficserver/etc/trafficserver/ssl_multicert.config
-%config(noreplace) %attr(644,ats,ats) /opt/trafficserver/etc/trafficserver/ssl_server_name.yaml
 %config(noreplace) %attr(644,ats,ats) /opt/trafficserver/etc/trafficserver/storage.config
 %config(noreplace) %attr(644,ats,ats) /opt/trafficserver/etc/trafficserver/volume.config
 
 %changelog
-* Wed Mar 10 2021 Jonathan Gray <jhg03a(at)apache.org>
-- Modified to support stop bundling openssl with ats
-* Wed Aug 26 2020 Chris Lemmons <alficles(at)gmail.com>
-- Updated to incorporate new tooling and Apache Traffic Control patches
 * Wed Jun 8 2016 John Rushford <john_rushford(at)cable.comcast.com>
 - Added tools/rc_admin.pl to complete rpm tasks under both Enterprise Linux 6 or 7 using either chkconfig or systemd commands.
 - Modified this spec file to use rc_admin.pl
diff --git a/traffic_server/_tsb/trafficserver.spec b/traffic_ops_ort/testing/docker/trafficserver/trafficserver-9.spec
similarity index 65%
copy from traffic_server/_tsb/trafficserver.spec
copy to traffic_ops_ort/testing/docker/trafficserver/trafficserver-9.spec
index 79d71fc..92d5253 100644
--- a/traffic_server/_tsb/trafficserver.spec
+++ b/traffic_ops_ort/testing/docker/trafficserver/trafficserver-9.spec
@@ -1,3 +1,4 @@
+#
 # Licensed to the Apache Software Foundation (ASF) under one
 # or more contributor license agreements.  See the NOTICE file
 # distributed with this work for additional information
@@ -17,69 +18,56 @@
 #
 # SPDX-License-Identifier: Apache-2.0
 
-%global src %{_topdir}/SOURCES/src
+%global src %{_topdir}/SOURCES/trafficserver
 %global git_args --git-dir="%{src}/.git" --work-tree="%{src}"
-%global tag %(git %{git_args} describe --long |      sed 's/^\\\(.*\\\)-\\\([0-9]\\\+\\\)-g\\\([0-9a-f]\\\+\\\)$/\\\1/' | sed 's/-/_/')
+%global git_tag %(git %{git_args} describe --long | sed 's/^\\\(.*\\\)-\\\([0-9]\\\+\\\)-g\\\([0-9a-f]\\\+\\\)$/\\\1/' | sed 's/-/_/')
 %global distance %(git %{git_args} describe --long | sed 's/^\\\(.*\\\)-\\\([0-9]\\\+\\\)-g\\\([0-9a-f]\\\+\\\)$/\\\2/')
-%global commit %(git %{git_args} describe --long |   sed 's/^\\\(.*\\\)-\\\([0-9]\\\+\\\)-g\\\([0-9a-f]\\\+\\\)$/\\\3/')
+%global commit %(git %{git_args} describe --long | sed 's/^\\\(.*\\\)-\\\([0-9]\\\+\\\)-g\\\([0-9a-f]\\\+\\\)$/\\\3/')
 %global git_serial %(git %{git_args} rev-list HEAD | wc -l)
 %global install_prefix "/opt"
 %global api_stats "4096"
 %global _find_debuginfo_dwz_opts %{nil}
-%{!?_with_openssl_included: %{!?_without_openssl_included: %define _without_openssl_included --without-openssl_included}}
-%{?_with_openssl_included: %{?_without_openssl_included: %{error: both _with_openssl_included and _without_openssl_included}}}
-%{!?_with_openssl_included: %{!?_without_openssl_included: %{error: neither _with_openssl_included nor _without_openssl_included}}}
-%{?_without_openssl_included:BuildRequires: openssl-devel}
+
+%global min_tag 9.0.0
+%global tag %(echo -e '%{min_tag}\\n%{git_tag}' | sort | tail -n 1 )
 
 Name:		trafficserver
 Version:	%{tag}
 Epoch:		%{git_serial}
 Release:	%{distance}.%{commit}%{?dist}
 Summary:	Apache Traffic Server
-Vendor:		Apache
+Packager:	ORT integration tests.
+Vendor:		IPCDN
 Group:		Applications/Communications
 License:	Apache License, Version 2.0
-URL:		https://github.com/apache/trafficserver
+URL:		  https://github.com/apache/trafficcontrol
 BuildRoot:	%(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
-Requires:	tcl, hwloc, pcre, libcap
-BuildRequires:	autoconf, automake, libtool, gcc-c++, glibc-devel, expat-devel, pcre, libcap-devel, pcre-devel, perl-ExtUtils-MakeMaker, tcl-devel, hwloc-devel
-Source: src
+Requires:	tcl, hwloc, pcre, libcap, brotli, libmaxminddb, openssl
+BuildRequires:	autoconf, automake, devtoolset-9 libtool, pcre, libcap-devel, pcre-devel
+Source: trafficserver
 
 %description
-Apache Traffic Server with Apache Traffic Control modifications and environment specific modifications
+Apache Traffic Server with Comcast modifications and environment specific modifications
 
 %prep
 %setup -c -T
 cp -far %{src}/. .
-cp -far %{src}/../traffic_server_jemalloc ..
 autoreconf -vfi
 
 %build
-%if %{?_with_openssl_included:1}%{!?_with_openssl_included:0}
-./configure --with-openssl=/opt/trafficserver/openssl --prefix=%{install_prefix}/%{name} --with-user=ats --with-group=ats --with-build-number=%{release} --enable-experimental-plugins --with-max-api-stats=%{api_stats} --disable-unwind
-%else
-./configure --prefix=%{install_prefix}/%{name} --with-user=ats --with-group=ats --with-build-number=%{release} --enable-experimental-plugins --with-max-api-stats=%{api_stats} --disable-unwind
-%endif
+./configure --with-openssl=/usr --prefix=%{install_prefix}/%{name} --with-user=ats --with-group=ats --with-build-number=%{release} --enable-experimental-plugins --with-max-api-stats=%{api_stats} --disable-unwind
 make %{?_smp_mflags}
-%if %{?_with_openssl_included:1}%{!?_with_openssl_included:0}
-export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/trafficserver/openssl/lib:/usr/local/lib
-%else
-export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
-%endif
-make %{?_smp_mflags} check || ( cat ./test-suite.log; exit 1 )
+make %{?_smp_mflags} 
 
 %install
 make DESTDIR=$RPM_BUILD_ROOT install
+# WARNING!  Don't build a RPM on a 'real' (ats server) box
+# Totally ghetto, but ATS build scripts aren't RPM (DESTDIR=$RPM_BUILD_ROOT, etc) compliant
+# ..so why haven't we fixed them? VSSCDNENG-767
 
 mkdir -p $RPM_BUILD_ROOT/opt/trafficserver/etc/trafficserver/snapshots
 mkdir -p $RPM_BUILD_ROOT/usr/lib/systemd/system
 cp rc/trafficserver.service $RPM_BUILD_ROOT/usr/lib/systemd/system/
-cp ../traffic_server_jemalloc $RPM_BUILD_ROOT/opt/trafficserver/bin/
-
-%if %{?_with_openssl_included:1}%{!?_with_openssl_included:0}
-mkdir -p $RPM_BUILD_ROOT/opt/trafficserver/openssl
-cp -r /opt/trafficserver/openssl/lib $RPM_BUILD_ROOT/opt/trafficserver/openssl/lib
-%endif
 
 %clean
 rm -rf $RPM_BUILD_ROOT
@@ -112,13 +100,9 @@ if [ "$1" = "0" ]; then
 fi
 
 %files
-%license LICENSE
 %defattr(-,root,root)
 %attr(644,-,-) /usr/lib/systemd/system/trafficserver.service
 %dir /opt/trafficserver
-%if %{?_with_openssl_included:1}%{!?_with_openssl_included:0}
-/opt/trafficserver/openssl
-%endif
 /opt/trafficserver/bin
 /opt/trafficserver/include
 /opt/trafficserver/lib
@@ -135,24 +119,21 @@ fi
 /opt/trafficserver/etc/trafficserver/trafficserver-release
 %config(noreplace) %attr(644,ats,ats) /opt/trafficserver/etc/trafficserver/cache.config
 %config(noreplace) %attr(644,ats,ats) /opt/trafficserver/etc/trafficserver/hosting.config
-%config(noreplace) %attr(644,ats,ats) /opt/trafficserver/etc/trafficserver/ip_allow.config
+%config(noreplace) %attr(644,ats,ats) /opt/trafficserver/etc/trafficserver/ip_allow.yaml
 %config(noreplace) %attr(644,ats,ats) /opt/trafficserver/etc/trafficserver/logging.yaml
 %config(noreplace) %attr(644,ats,ats) /opt/trafficserver/etc/trafficserver/parent.config
 %config(noreplace) %attr(644,ats,ats) /opt/trafficserver/etc/trafficserver/plugin.config
 %config(noreplace) %attr(644,ats,ats) /opt/trafficserver/etc/trafficserver/records.config
 %config(noreplace) %attr(644,ats,ats) /opt/trafficserver/etc/trafficserver/remap.config
+%config(noreplace) %attr(644,ats,ats) /opt/trafficserver/etc/trafficserver/sni.yaml
 %config(noreplace) %attr(644,ats,ats) /opt/trafficserver/etc/trafficserver/socks.config
 %config(noreplace) %attr(644,ats,ats) /opt/trafficserver/etc/trafficserver/splitdns.config
 %config(noreplace) %attr(644,ats,ats) /opt/trafficserver/etc/trafficserver/ssl_multicert.config
-%config(noreplace) %attr(644,ats,ats) /opt/trafficserver/etc/trafficserver/ssl_server_name.yaml
 %config(noreplace) %attr(644,ats,ats) /opt/trafficserver/etc/trafficserver/storage.config
+%config(noreplace) %attr(644,ats,ats) /opt/trafficserver/etc/trafficserver/strategies.yaml
 %config(noreplace) %attr(644,ats,ats) /opt/trafficserver/etc/trafficserver/volume.config
 
 %changelog
-* Wed Mar 10 2021 Jonathan Gray <jhg03a(at)apache.org>
-- Modified to support stop bundling openssl with ats
-* Wed Aug 26 2020 Chris Lemmons <alficles(at)gmail.com>
-- Updated to incorporate new tooling and Apache Traffic Control patches
 * Wed Jun 8 2016 John Rushford <john_rushford(at)cable.comcast.com>
 - Added tools/rc_admin.pl to complete rpm tasks under both Enterprise Linux 6 or 7 using either chkconfig or systemd commands.
 - Modified this spec file to use rc_admin.pl
diff --git a/traffic_server/_tsb/trafficserver.spec b/traffic_server/_tsb/trafficserver.spec
index 79d71fc..83b4c08 100644
--- a/traffic_server/_tsb/trafficserver.spec
+++ b/traffic_server/_tsb/trafficserver.spec
@@ -1,3 +1,4 @@
+#
 # Licensed to the Apache Software Foundation (ASF) under one
 # or more contributor license agreements.  See the NOTICE file
 # distributed with this work for additional information