diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 471983a..51f4816 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -7,14 +7,14 @@ name: deploy # See https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet on: push: - tags: '[0-9]+.[0-9]+.[0-9]+**' # Ex. 8.272.10 or 15.0.1_p9 + tags: '[0-9]+.[0-9]+.[0-9]+**' # Ex. 8.272.10 or 21.0.1_p12 jobs: deploy: - runs-on: ubuntu-20.04 # newest available distribution, aka focal + runs-on: ubuntu-22.04 # newest available distribution, aka jellyfish steps: - name: Checkout Repository - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: fetch-depth: 1 # only needed to get the sha label # We can't cache Docker without using buildx because GH actions restricts /var/lib/docker diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index bdb0425..8243766 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -16,10 +16,10 @@ on: jobs: test: - runs-on: ubuntu-20.04 # newest available distribution, aka focal + runs-on: ubuntu-22.04 # newest available distribution, aka jellyfish steps: - name: Checkout Repository - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: fetch-depth: 1 # only needed to get the sha label # We can't cache Docker without using buildx because GH actions restricts /var/lib/docker diff --git a/Dockerfile b/Dockerfile index 99c2e19..9a536e0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,8 +8,8 @@ # # When updating, also update the README # * This is the version output from building the image -ARG java_version=1.7.0_285 -FROM azul/zulu-openjdk-alpine:7u285 +ARG java_version=1.7.0_7u352 +FROM azul/zulu-openjdk-alpine:7u352 ARG maintainer="OpenZipkin https://gitter.im/openzipkin/zipkin" LABEL maintainer=$maintainer LABEL org.opencontainers.image.authors=$maintainer diff --git a/build-bin/README.md b/build-bin/README.md index 62efc3c..9cf3580 100755 --- a/build-bin/README.md +++ b/build-bin/README.md @@ -1,9 +1,9 @@ # Test and Deploy scripts This is a Docker project, which uses standard conventions for test and deploy. What's notable about -docker-java is that the base layers are only pushed to `ghcr.io`, and tests are simply running the -`-version` command. There's a non-standard `build` script referenced in [../README.md] that allows -easier manual builds of the Dockerfile. +docker-alpine is that the base layers are only pushed to `ghcr.io`, and tests are simply running the +`cat /etc/alpine-release`. There's a non-standard `build` script referenced in [../README.md] that +allows easier manual builds of the Dockerfile. [//]: # (Below here should be standard for all projects) @@ -11,7 +11,7 @@ easier manual builds of the Dockerfile. `build-bin` holds portable scripts used in CI to test and deploy the project. The scripts here are portable. They do not include any CI provider-specific logic or ENV variables. -This helps `.travis.yml` and `test.yml` (GitHub Actions) contain nearly the same contents, even if +This helps `test.yml` (GitHub Actions) and alternatives contain nearly the same contents, even if certain OpenZipkin projects need slight adjustments here. Portability has proven necessary, as OpenZipkin has had to transition CI providers many times due to feature and quota constraints. @@ -64,7 +64,7 @@ jobs: test: steps: - name: Checkout Repository - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: fetch-depth: 0 # full git history for license check - name: Test @@ -73,49 +73,6 @@ jobs: build-bin/test ``` -### Example Travis setup -`.travis.yml` is a monolithic configuration file broken into stages, of which the default is "test". -A simplest Travis `test` job configures tests in `install` and runs them as `script`, but only on -relevant event conditions. - -The `if:` section obviates job creation and resource usage for irrelevant events. Travis does not -support file conditions. A `before_install` step to skip documentation-only commits will likely -complete in less than a minute (10 credit cost). - -Here's a partial `.travis.yml` including only the aspects mentioned above. -```yaml -git: - depth: false # TRAVIS_COMMIT_RANGE requires full commit history. - -jobs: - include: - - stage: test - if: branch = master AND tag IS blank AND type IN (push, pull_request) - name: Run unit and integration tests - before_install: | # Prevent test build of a documentation-only change. - if [ -n "${TRAVIS_COMMIT_RANGE}" ] && ! git diff --name-only "${TRAVIS_COMMIT_RANGE}" -- | grep -qv '\.md$'; then - echo "Stopping job as changes only affect documentation (ex. README.md)" - travis_terminate 0 - fi - install: ./build-bin/configure_test - script: ./build-bin/test -``` - -When Travis only runs tests (something else does deploy), there's no need to use stages: -```yaml -git: - depth: false # TRAVIS_COMMIT_RANGE requires full commit history. - -if: branch = master AND tag IS blank AND type IN (push, pull_request) -before_install: | # Prevent test build of a documentation-only change. - if [ -n "${TRAVIS_COMMIT_RANGE}" ] && ! git diff --name-only "${TRAVIS_COMMIT_RANGE}" -- | grep -qv '\.md$'; then - echo "Stopping job as changes only affect documentation (ex. README.md)" - travis_terminate 0 - fi -install: ./build-bin/configure_test -script: ./build-bin/test -``` - ## Deploy Deploy builds and pushes artifacts to a remote repository for master and release commits on it. CI @@ -138,17 +95,18 @@ master will happen even on README change. Here's a partial `deploy.yml` including only the aspects mentioned above. Notice env variables are explicitly defined and `on.tags` is a [glob pattern](https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet). + ```yaml on: push: - tags: '[0-9]+.[0-9]+.[0-9]+**' # Ex. 8.272.10 or 15.0.1_p9 + tags: '[0-9]+.[0-9]+.[0-9]+**' # e.g. 8.272.10 or 15.0.1_p9 branches: master jobs: deploy: steps: - name: Checkout Repository - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: fetch-depth: 1 # only needed to get the sha label - name: Configure Deploy @@ -160,51 +118,3 @@ jobs: # GITHUB_REF will be refs/heads/master or refs/tags/1.2.3 run: build-bin/deploy $(echo ${GITHUB_REF} | cut -d/ -f 3) ``` -'[0-9]+.[0-9]+.[0-9]+**' -### Example Travis setup -`.travis.yml` is a monolithic configuration file broken into stages. This means `test` and `deploy` -are in the same file. A simplest Travis `deploy` stage has two jobs: one for master pushes and -another for version tags. These jobs are controlled by event conditions. - -The `if:` section obviates job creation and resource usage for irrelevant events. Travis does not -support file conditions. A `before_install` step to skip documentation-only commits will likely -complete in less than a minute (10 credit cost). - -As billing is by the minute, it is most cost effective to combine test and deploy on master push. - -Here's a partial `.travis.yml` including only the aspects mentioned above. Notice YAML anchors work -in Travis and `tag =~` [condition](https://github.com/travis-ci/travis-conditions) is a regular -expression. -```yaml -git: - depth: false # full git history for license check, and doc-only skipping - -_terminate_if_only_docs: &terminate_if_only_docs | - if [ -n "${TRAVIS_COMMIT_RANGE}" ] && ! git diff --name-only "${TRAVIS_COMMIT_RANGE}" -- | grep -qv '\.md$'; then - echo "Stopping job as changes only affect documentation (ex. README.md)" - travis_terminate 0 - fi - -jobs: - include: - - stage: test - if: branch = master AND tag IS blank AND type IN (push, pull_request) - before_install: *terminate_if_only_docs - install: | - if [ "${TRAVIS_SECURE_ENV_VARS}" = "true" ] && [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then - export SHOULD_DEPLOY=true - ./build-bin/configure_deploy - else - export SHOULD_DEPLOY=false - ./build-bin/configure_test - fi - script: - - ./build-bin/test || travis_terminate 1 - - if [ "${SHOULD_DEPLOY}" != "true" ]; then travis_terminate 0; fi - - travis_wait ./build-bin/deploy master - - stage: deploy - # Ex. 8.272.10 or 15.0.1_p9 - if: tag =~ /^[0-9]+\.[0-9]+\.[0-9]+/ AND type = push AND env(GH_TOKEN) IS present - install: ./build-bin/configure_deploy - script: ./build-bin/deploy ${TRAVIS_TAG} -``` diff --git a/build-bin/docker/configure_docker b/build-bin/docker/configure_docker index 92675fc..f71bb1a 100755 --- a/build-bin/docker/configure_docker +++ b/build-bin/docker/configure_docker @@ -1,6 +1,6 @@ #!/bin/sh # -# Copyright 2019-2020 The OpenZipkin Authors +# Copyright 2019-2023 The OpenZipkin Authors # # 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 @@ -24,13 +24,8 @@ set -ue # * See https://www.testcontainers.org/supported_docker_environment/image_registry_rate_limiting/ # * checks.disable=true - saves time and a docker.io pull of alpine echo checks.disable=true >> ~/.testcontainers.properties -# * change ryuk to ghcr.io until: https://github.com/testcontainers/moby-ryuk/issues/15 and 16 -echo ryuk.container.image=ghcr.io/openzipkin/testcontainers-ryuk:latest >> ~/.testcontainers.properties # We don't use any docker.io images, but add a Google's mirror in case something implicitly does # * See https://cloud.google.com/container-registry/docs/pulling-cached-images echo '{ "registry-mirrors": ["https://mirror.gcr.io"] }' | sudo tee /etc/docker/daemon.json sudo service docker restart - -# * Ensure buildx and related features are disabled -mkdir -p ${HOME}/.docker && echo '{"experimental":"disabled"}' > ${HOME}/.docker/config.json diff --git a/build-bin/docker/configure_docker_push b/build-bin/docker/configure_docker_push index 196e302..a26fab3 100755 --- a/build-bin/docker/configure_docker_push +++ b/build-bin/docker/configure_docker_push @@ -1,6 +1,6 @@ #!/bin/sh # -# Copyright 2019-2020 The OpenZipkin Authors +# Copyright 2019-2023 The OpenZipkin Authors # # 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 @@ -50,5 +50,8 @@ fi # See https://github.com/multiarch/qemu-user-static # # Mirrored image use to avoid docker.io pulls: -# docker tag multiarch/qemu-user-static:5.1.0-7 ghcr.io/openzipkin/multiarch-qemu-user-static:latest +# docker tag multiarch/qemu-user-static:7.2.0-1 ghcr.io/openzipkin/multiarch-qemu-user-static:latest +# +# Note: This image only works on x86_64/amd64 architecture. +# See: https://github.com/multiarch/qemu-user-static#supported-host-architectures docker run --rm --privileged ghcr.io/openzipkin/multiarch-qemu-user-static --reset -p yes diff --git a/build-bin/docker/docker_arch b/build-bin/docker/docker_arch index c668e69..d83063e 100755 --- a/build-bin/docker/docker_arch +++ b/build-bin/docker/docker_arch @@ -1,6 +1,6 @@ #!/bin/sh # -# Copyright 2019-2020 The OpenZipkin Authors +# Copyright 2019-2023 The OpenZipkin Authors # # 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 @@ -21,6 +21,8 @@ set -ue # Normalize docker_arch to what's available +# +# Note: s390x and ppc64le were added for Knative docker_arch=${DOCKER_ARCH:-$(uname -m)} case ${docker_arch} in amd64* ) @@ -35,6 +37,12 @@ case ${docker_arch} in aarch64* ) docker_arch=arm64 ;; + s390x* ) + docker_arch=s390x + ;; + ppc64le* ) + docker_arch=ppc64le + ;; * ) >&2 echo "Unsupported DOCKER_ARCH: ${docker_arch}" exit 1; diff --git a/build-bin/docker/docker_args b/build-bin/docker/docker_args index 95664b0..7f35ba3 100755 --- a/build-bin/docker/docker_args +++ b/build-bin/docker/docker_args @@ -1,6 +1,6 @@ #!/bin/sh # -# Copyright 2019-2020 The OpenZipkin Authors +# Copyright 2019-2023 The OpenZipkin Authors # # 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 @@ -46,7 +46,7 @@ if [ -n "${DOCKER_TARGET}" ]; then fi # When non-empty, becomes the base layer including tag appropriate for the image being built. -# Ex. ghcr.io/openzipkin/java:15.0.1_p9-jre +# e.g. ghcr.io/openzipkin/java:21.0.1_p12-jre # # This is not required to be a base (FROM scratch) image like ghcr.io/openzipkin/alpine:3.12.3 # See https://docs.docker.com/glossary/#parent-image @@ -54,13 +54,13 @@ if [ -n "${DOCKER_PARENT_IMAGE}" ]; then docker_args="${docker_args} --build-arg docker_parent_image=${DOCKER_PARENT_IMAGE}" fi -# When non-empty, becomes the build-arg alpine_version. Ex. "3.12.3" +# When non-empty, becomes the build-arg alpine_version. e.g. "3.12.3" # Used to align base layers from https://github.com/orgs/openzipkin/packages/container/package/alpine if [ -n "${ALPINE_VERSION}" ]; then docker_args="${docker_args} --build-arg alpine_version=${ALPINE_VERSION}" fi -# When non-empty, becomes the build-arg java_version. Ex. "15.0.1_p9" +# When non-empty, becomes the build-arg java_version. e.g. "21.0.1_p12" # Used to align base layers from https://github.com/orgs/openzipkin/packages/container/package/java if [ -n "${JAVA_VERSION}" ]; then docker_args="${docker_args} --build-arg java_version=${JAVA_VERSION}" @@ -69,13 +69,13 @@ if [ -n "${JAVA_VERSION}" ]; then java_major_version=$(echo ${JAVA_VERSION}| cut -f1 -d .) case ${java_major_version} in 8) java_home=/usr/lib/jvm/java-1.8-openjdk;; - 1?) java_home=/usr/lib/jvm/java-${java_major_version}-openjdk;; + 1?|2?|3?) java_home=/usr/lib/jvm/java-${java_major_version}-openjdk;; esac if [ -n "${java_home}" ]; then docker_args="${docker_args} --build-arg java_home=${java_home}"; fi fi -# When non-empty, becomes the build-arg maven_classifier. Ex. "module" or "exec" +# When non-empty, becomes the build-arg maven_classifier. e.g. "module" or "exec" # Used as the classifier arg to ./build-bin/maven/maven_unjar. Allows building two images with the # same Dockerfile, varying on classifier, like openzipkin/zipkin vs openzipkin/zipkin-slim if [ -n "${MAVEN_CLASSIFIER}" ]; then diff --git a/build-bin/docker/docker_build b/build-bin/docker/docker_build index 98c8e78..05d5450 100755 --- a/build-bin/docker/docker_build +++ b/build-bin/docker/docker_build @@ -1,6 +1,6 @@ #!/bin/sh # -# Copyright 2019-2020 The OpenZipkin Authors +# Copyright 2019-2023 The OpenZipkin Authors # # 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 @@ -19,9 +19,5 @@ docker_tag=${1?full docker_tag is required. Ex openzipkin/zipkin:test} version=${2:-} docker_args=$($(dirname "$0")/docker_args ${version}) -# Avoid buildx on load for reasons including: -# * Caching is more complex as builder instances must be considered -# * It only supports one platform/arch on load https://github.com/docker/buildx/issues/59 -# * It would pull Docker Hub for moby/buildkit or multiarch/qemu-user-static images, using up quota echo "Building image ${docker_tag}" -DOCKER_BUILDKIT=0 docker build --pull ${docker_args} --tag ${docker_tag} . +DOCKER_BUILDKIT=1 docker build --network=host --pull ${docker_args} --tag ${docker_tag} . diff --git a/build-bin/docker/docker_push b/build-bin/docker/docker_push index 8d6266b..3d3c8f9 100755 --- a/build-bin/docker/docker_push +++ b/build-bin/docker/docker_push @@ -1,6 +1,6 @@ #!/bin/sh # -# Copyright 2019-2020 The OpenZipkin Authors +# Copyright 2019-2023 The OpenZipkin Authors # # 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 @@ -27,7 +27,7 @@ set -ue docker_image=${1?docker_image is required, notably without a tag. Ex openzipkin/zipkin} version=${2:-master} -export DOCKER_BUILDKIT=0 +export DOCKER_BUILDKIT=1 case ${version} in master ) @@ -64,7 +64,8 @@ for repo in ${docker_repos}; do done docker_args=$($(dirname "$0")/docker_args ${version}) -docker_archs=${DOCKER_ARCHS:-amd64 arm64} +# Note: s390x and ppc64le were added for Knative +docker_archs=${DOCKER_ARCHS:-amd64 arm64 s390x ppc64le} echo "Will build the following architectures: ${docker_archs}" @@ -114,4 +115,3 @@ else docker manifest push -p ${tag} done fi -