diff --git a/.github/gh-config-template/README.md b/.github/gh-config-template/README.md new file mode 100644 index 000000000..42efd0e27 --- /dev/null +++ b/.github/gh-config-template/README.md @@ -0,0 +1,8 @@ +# Generate github actions from template + +ytt -f ./gh_template.yml -f [ytt-helpers.star](https://github.com/cloudfoundry/wg-app-platform-runtime-ci/blob/main/shared/helpers/ytt-helpers.star) -f [index.yml](https://github.com/cloudfoundry/wg-app-platform-runtime-ci/blob/main/routing-release/index.yml) > ./workflows/tests-workflow.yml + +## Supported jobs +- Template tests +- Basic Verifications +- Unit and Integration tests \ No newline at end of file diff --git a/.github/gh-config-template/gh_template.yml b/.github/gh-config-template/gh_template.yml new file mode 100644 index 000000000..03f203557 --- /dev/null +++ b/.github/gh-config-template/gh_template.yml @@ -0,0 +1,176 @@ +#@ load("@ytt:data", "data") +#@ load("ytt-helpers.star", "helpers") + +name: unit-integration-tests + +on: + push: + branches: + - develop + pull_request: + +env: + MAPPING: | + build_nats_server=src/code.cloudfoundry.org/vendor/github.com/nats-io/nats-server/v2 + build_routing_api_cli=src/code.cloudfoundry.org/routing-api-cli + FLAGS: | + --keep-going + --trace + -r + --fail-on-pending + --randomize-all + --nodes=7 + --race + --timeout 30m + --flake-attempts 2 + RUN_AS: root + VERIFICATIONS: | + verify_go repo/$DIR + verify_go_version_match_bosh_release repo + verify_gofmt repo/$DIR + verify_govet repo/$DIR + verify_staticcheck repo/$DIR + FUNCTIONS: ci/routing-release/helpers/configure-binaries.bash + +jobs: + repo-clone: + runs-on: ubuntu-latest + steps: + - name: routing-release-repo + uses: actions/checkout@v4 + with: + repository: cloudfoundry/routing-release.git + ref: github-action + submodules: recursive + path: repo + - name: Check out wg-appruntime code + uses: actions/checkout@v4 + with: + repository: cloudfoundry/wg-app-platform-runtime-ci + path: ci + - name: zip repo artifacts + run: | + tar -czf repo-artifact.tar.gz repo + tar -czf ci-artifact.tar.gz ci + - name: upload artifact + uses: actions/upload-artifact@v4 + with: + name: repo + path: | + repo-artifact.tar.gz + ci-artifact.tar.gz + template-tests: + runs-on: ubuntu-latest + needs: repo-clone + container: + image: cloudfoundry/tas-runtime-mysql-5.7 + steps: + - name: Download artifact + uses: actions/download-artifact@v4 + with: + name: repo + - run: "tar -xzvf repo-artifact.tar.gz\ntar -xzvf ci-artifact.tar.gz\n" + - name: template-tests + run: | + "${GITHUB_WORKSPACE}"/ci/shared/tasks/run-tests-templates/task.bash + test-on-mysql-5-7: + runs-on: ubuntu-latest + needs: repo-clone + container: + image: cloudfoundry/tas-runtime-mysql-5.7 + steps: + - name: Download artifact + uses: actions/download-artifact@v4 + with: + name: repo + - run: | + tar -xzvf repo-artifact.tar.gz + tar -xzvf ci-artifact.tar.gz + - name: build binaries + run: | + export DEFAULT_PARAMS="${GITHUB_WORKSPACE}/ci/routing-release/default-params/build-binaries/linux.yml" + "${GITHUB_WORKSPACE}"/ci/shared/tasks/build-binaries/task.bash +#@ for package in helpers.packages_with_configure_db(data.values.internal_repos): + - name: #@ "{}-mysql".format(package.name) + env: + DIR: #@ "src/code.cloudfoundry.org/{}".format(package.name) + DB: mysql + run: | + "${GITHUB_WORKSPACE}"/ci/routing-release/helpers/configure-binaries.bash + "${GITHUB_WORKSPACE}"/ci/shared/tasks/run-bin-test/task.bash --keep-going --trace -r --fail-on-pending --randomize-all --nodes=7 --race --timeout 30m --flake-attempts 2 +#@ end + test-repos-withoutdb: + runs-on: ubuntu-latest + needs: repo-clone + container: + image: cloudfoundry/tas-runtime-build + steps: + - name: Download artifact + uses: actions/download-artifact@v4 + with: + name: repo + - run: | + tar -xzvf repo-artifact.tar.gz + tar -xzvf ci-artifact.tar.gz + - name: build binaries + run: | + export DEFAULT_PARAMS="${GITHUB_WORKSPACE}/ci/routing-release/default-params/build-binaries/linux.yml" + "${GITHUB_WORKSPACE}"/ci/shared/tasks/build-binaries/task.bash +#@ for package in helpers.packages_without_configure_db(data.values.internal_repos): + - name: #@ package.name + env: + DIR: #@ "src/code.cloudfoundry.org/{}".format(package.name) + run: | + export DIR=$DIR + "${GITHUB_WORKSPACE}"/ci/shared/tasks/run-bin-test/task.bash --keep-going --trace -r --fail-on-pending --randomize-all --nodes=7 --race --timeout 30m --flake-attempts 2 +#@ end + test-on-postgres: + runs-on: ubuntu-latest + needs: repo-clone + container: + image: cloudfoundry/tas-runtime-postgres + steps: + - name: Download artifact + uses: actions/download-artifact@v4 + with: + name: repo + - run: | + tar -xzvf repo-artifact.tar.gz + tar -xzvf ci-artifact.tar.gz + - name: build binaries + run: | + export DEFAULT_PARAMS="${GITHUB_WORKSPACE}/ci/routing-release/default-params/build-binaries/linux.yml" + "${GITHUB_WORKSPACE}"/ci/shared/tasks/build-binaries/task.bash +#@ for package in helpers.packages_with_configure_db(data.values.internal_repos): + - name: #@ "{}-mysql".format(package.name) + env: + DIR: #@ "src/code.cloudfoundry.org/{}".format(package.name) + DB: postgres + run: | + "${GITHUB_WORKSPACE}"/ci/shared/tasks/run-bin-test/task.bash --keep-going --trace -r --fail-on-pending --randomize-all --nodes=7 --race --timeout 30m --flake-attempts 2 +#@ end + test-on-mysql-8-0: + runs-on: ubuntu-latest + needs: repo-clone + container: + image: cloudfoundry/tas-runtime-mysql-8.0 + steps: + - name: Download artifact + uses: actions/download-artifact@v4 + with: + name: repo + - run: | + tar -xzvf repo-artifact.tar.gz + tar -xzvf ci-artifact.tar.gz + - name: build binaries + run: | + export DEFAULT_PARAMS="${GITHUB_WORKSPACE}/ci/routing-release/default-params/build-binaries/linux.yml" + "${GITHUB_WORKSPACE}"/ci/shared/tasks/build-binaries/task.bash +#@ for package in helpers.packages_with_configure_db(data.values.internal_repos): + - name: #@ "{}-mysql".format(package.name) + env: + DIR: #@ "src/code.cloudfoundry.org/{}".format(package.name) + DB: mysql + run: | + "${GITHUB_WORKSPACE}"/ci/shared/tasks/run-bin-test/task.bash --keep-going --trace -r --fail-on-pending --randomize-all --nodes=7 --race --timeout 30m --flake-attempts 2 +#@ end \ No newline at end of file diff --git a/.github/workflows/tests-workflow.yml b/.github/workflows/tests-workflow.yml new file mode 100644 index 000000000..2d177a504 --- /dev/null +++ b/.github/workflows/tests-workflow.yml @@ -0,0 +1,217 @@ +name: unit-integration-tests +on: + push: + branches: + - develop + pull_request: + +env: + MAPPING: | + build_nats_server=src/code.cloudfoundry.org/vendor/github.com/nats-io/nats-server/v2 + build_routing_api_cli=src/code.cloudfoundry.org/routing-api-cli + FLAGS: | + --keep-going + --trace + -r + --fail-on-pending + --randomize-all + --nodes=7 + --race + --timeout 30m + --flake-attempts 2 + RUN_AS: root + VERIFICATIONS: | + verify_go repo/$DIR + verify_go_version_match_bosh_release repo + verify_gofmt repo/$DIR + verify_govet repo/$DIR + verify_staticcheck repo/$DIR + FUNCTIONS: ci/routing-release/helpers/configure-binaries.bash +jobs: + repo-clone: + runs-on: ubuntu-latest + steps: + - name: routing-release-repo + uses: actions/checkout@v4 + with: + repository: cloudfoundry/routing-release.git + ref: develop + submodules: recursive + path: repo + - name: Check out wg-appruntime code + uses: actions/checkout@v4 + with: + repository: cloudfoundry/wg-app-platform-runtime-ci + path: ci + - name: zip repo artifacts + run: | + tar -czf repo-artifact.tar.gz repo + tar -czf ci-artifact.tar.gz ci + - name: upload artifact + uses: actions/upload-artifact@v4 + with: + name: repo + path: | + repo-artifact.tar.gz + ci-artifact.tar.gz + template-tests: + runs-on: ubuntu-latest + needs: repo-clone + container: + image: us-central1-docker.pkg.dev/cf-diego-pivotal/tas-runtime-dockerhub-mirror/cloudfoundry/tas-runtime-build + credentials: + username: _json_key + password: ${{ secrets.GCP_SERVICE_ACCOUNT_TAS_RUNTIME_BUILD_IMAGE_READER }} + steps: + - name: Download artifact + uses: actions/download-artifact@v4 + with: + name: repo + - run: "tar -xzvf repo-artifact.tar.gz\ntar -xzvf ci-artifact.tar.gz\n" + - name: template-tests + run: | + "${GITHUB_WORKSPACE}"/ci/shared/tasks/run-tests-templates/task.bash + test-on-mysql-5-7: + runs-on: ubuntu-latest + needs: repo-clone + container: + image: us-central1-docker.pkg.dev/cf-diego-pivotal/tas-runtime-dockerhub-mirror/cloudfoundry/tas-runtime-mysql-5.7 + credentials: + username: _json_key + password: ${{ secrets.GCP_SERVICE_ACCOUNT_TAS_RUNTIME_BUILD_IMAGE_READER }} + steps: + - name: Download artifact + uses: actions/download-artifact@v4 + with: + name: repo + - run: "tar -xzvf repo-artifact.tar.gz\ntar -xzvf ci-artifact.tar.gz\n" + - name: build binaries + run: | + export DEFAULT_PARAMS="${GITHUB_WORKSPACE}/ci/routing-release/default-params/build-binaries/linux.yml" + "${GITHUB_WORKSPACE}"/ci/shared/tasks/build-binaries/task.bash + - name: gorouter-mysql + env: + DIR: src/code.cloudfoundry.org/gorouter + DB: mysql + run: | + "${GITHUB_WORKSPACE}"/ci/shared/tasks/run-bin-test/task.bash --keep-going --trace -r --fail-on-pending --randomize-all --nodes=7 --race --timeout 30m --flake-attempts 2 + - name: cf-tcp-router-mysql + env: + DIR: src/code.cloudfoundry.org/cf-tcp-router + DB: mysql + run: | + "${GITHUB_WORKSPACE}"/ci/shared/tasks/run-bin-test/task.bash --keep-going --trace -r --fail-on-pending --randomize-all --nodes=7 --race --timeout 30m --flake-attempts 2 + - name: routing-api-mysql + env: + DIR: src/code.cloudfoundry.org/routing-api + DB: mysql + run: | + "${GITHUB_WORKSPACE}"/ci/shared/tasks/run-bin-test/task.bash --keep-going --trace -r --fail-on-pending --randomize-all --nodes=7 --race --timeout 30m --flake-attempts 2 + test-repos-withoutdb: + runs-on: ubuntu-latest + needs: repo-clone + container: + image: us-central1-docker.pkg.dev/cf-diego-pivotal/tas-runtime-dockerhub-mirror/cloudfoundry/tas-runtime-build + credentials: + username: _json_key + password: ${{ secrets.GCP_SERVICE_ACCOUNT_TAS_RUNTIME_BUILD_IMAGE_READER }} + steps: + - name: Download artifact + uses: actions/download-artifact@v4 + with: + name: repo + - run: "tar -xzvf repo-artifact.tar.gz\ntar -xzvf ci-artifact.tar.gz\n" + - name: build binaries + run: | + export DEFAULT_PARAMS="${GITHUB_WORKSPACE}/ci/routing-release/default-params/build-binaries/linux.yml" + "${GITHUB_WORKSPACE}"/ci/shared/tasks/build-binaries/task.bash + - name: multierror + env: + DIR: src/code.cloudfoundry.org/multierror + run: | + export DIR=$DIR + "${GITHUB_WORKSPACE}"/ci/shared/tasks/run-bin-test/task.bash --keep-going --trace -r --fail-on-pending --randomize-all --nodes=7 --race --timeout 30m --flake-attempts 2 + - name: route-registrar + env: + DIR: src/code.cloudfoundry.org/route-registrar + run: | + export DIR=$DIR + "${GITHUB_WORKSPACE}"/ci/shared/tasks/run-bin-test/task.bash --keep-going --trace -r --fail-on-pending --randomize-all --nodes=7 --race --timeout 30m --flake-attempts 2 + - name: routing-api-cli + env: + DIR: src/code.cloudfoundry.org/routing-api-cli + run: | + export DIR=$DIR + "${GITHUB_WORKSPACE}"/ci/shared/tasks/run-bin-test/task.bash --keep-going --trace -r --fail-on-pending --randomize-all --nodes=7 --race --timeout 30m --flake-attempts 2 + test-on-postgres: + runs-on: ubuntu-latest + needs: repo-clone + container: + image: us-central1-docker.pkg.dev/cf-diego-pivotal/tas-runtime-dockerhub-mirror/cloudfoundry/tas-runtime-postgres + credentials: + username: _json_key + password: ${{ secrets.GCP_SERVICE_ACCOUNT_TAS_RUNTIME_BUILD_IMAGE_READER }} + steps: + - name: Download artifact + uses: actions/download-artifact@v4 + with: + name: repo + - run: "tar -xzvf repo-artifact.tar.gz\ntar -xzvf ci-artifact.tar.gz\n" + - name: build binaries + run: | + export DEFAULT_PARAMS="${GITHUB_WORKSPACE}/ci/routing-release/default-params/build-binaries/linux.yml" + "${GITHUB_WORKSPACE}"/ci/shared/tasks/build-binaries/task.bash + - name: gorouter-mysql + env: + DIR: src/code.cloudfoundry.org/gorouter + DB: postgres + run: | + "${GITHUB_WORKSPACE}"/ci/shared/tasks/run-bin-test/task.bash --keep-going --trace -r --fail-on-pending --randomize-all --nodes=7 --race --timeout 30m --flake-attempts 2 + - name: cf-tcp-router-mysql + env: + DIR: src/code.cloudfoundry.org/cf-tcp-router + DB: postgres + run: | + "${GITHUB_WORKSPACE}"/ci/shared/tasks/run-bin-test/task.bash --keep-going --trace -r --fail-on-pending --randomize-all --nodes=7 --race --timeout 30m --flake-attempts 2 + - name: routing-api-mysql + env: + DIR: src/code.cloudfoundry.org/routing-api + DB: postgres + run: | + "${GITHUB_WORKSPACE}"/ci/shared/tasks/run-bin-test/task.bash --keep-going --trace -r --fail-on-pending --randomize-all --nodes=7 --race --timeout 30m --flake-attempts 2 + test-on-mysql-8-0: + runs-on: ubuntu-latest + needs: repo-clone + container: + image: us-central1-docker.pkg.dev/cf-diego-pivotal/tas-runtime-dockerhub-mirror/cloudfoundry/tas-runtime-mysql-8.0 + credentials: + username: _json_key + password: ${{ secrets.GCP_SERVICE_ACCOUNT_TAS_RUNTIME_BUILD_IMAGE_READER }} + steps: + - name: Download artifact + uses: actions/download-artifact@v4 + with: + name: repo + - run: "tar -xzvf repo-artifact.tar.gz\ntar -xzvf ci-artifact.tar.gz\n" + - name: build binaries + run: | + export DEFAULT_PARAMS="${GITHUB_WORKSPACE}/ci/routing-release/default-params/build-binaries/linux.yml" + "${GITHUB_WORKSPACE}"/ci/shared/tasks/build-binaries/task.bash + - name: gorouter-mysql + env: + DIR: src/code.cloudfoundry.org/gorouter + DB: mysql + run: | + "${GITHUB_WORKSPACE}"/ci/shared/tasks/run-bin-test/task.bash --keep-going --trace -r --fail-on-pending --randomize-all --nodes=7 --race --timeout 30m --flake-attempts 2 + - name: cf-tcp-router-mysql + env: + DIR: src/code.cloudfoundry.org/cf-tcp-router + DB: mysql + run: | + "${GITHUB_WORKSPACE}"/ci/shared/tasks/run-bin-test/task.bash --keep-going --trace -r --fail-on-pending --randomize-all --nodes=7 --race --timeout 30m --flake-attempts 2 + - name: routing-api-mysql + env: + DIR: src/code.cloudfoundry.org/routing-api + DB: mysql + run: | + "${GITHUB_WORKSPACE}"/ci/shared/tasks/run-bin-test/task.bash --keep-going --trace -r --fail-on-pending --randomize-all --nodes=7 --race --timeout 30m --flake-attempts 2