Migrate remaining macOS tests to GHA
diff --git a/.github/actions/internal/bazel-setup/action.yml b/.github/actions/internal/bazel-setup/action.yml index 2894479..112ee1c 100644 --- a/.github/actions/internal/bazel-setup/action.yml +++ b/.github/actions/internal/bazel-setup/action.yml
@@ -42,7 +42,7 @@ run: > echo "BAZEL_FLAGS=$BAZEL_FLAGS --google_credentials='${{ inputs.credentials-file }}' - --remote_cache=https://storage.googleapis.com/protobuf-bazel-cache/protobuf/gha/${{ inputs.bazel-cache }}" >> $GITHUB_ENV + --remote_cache='https://storage.googleapis.com/protobuf-bazel-cache/protobuf/gha/${{ inputs.bazel-cache }}'" >> $GITHUB_ENV - name: Configure Bazel cache writing # External runs should never write to our caches.
diff --git a/.github/actions/internal/setup-runner/action.yml b/.github/actions/internal/setup-runner/action.yml index 5c4f783..64afdc3 100644 --- a/.github/actions/internal/setup-runner/action.yml +++ b/.github/actions/internal/setup-runner/action.yml
@@ -1,6 +1,6 @@ name: Setup CI Runner -# TODO(b/267357823) Consider moving this to it's own repository and include -# a call to actions/checkout. +# TODO(b/267357823) Consider moving this to it's own repository so we can +# include the call to actions/checkout. description: Setup any platform-specific adjustments we need to make for CI runs: using: 'composite'
diff --git a/.github/workflows/test_objectivec.yml b/.github/workflows/test_objectivec.yml new file mode 100644 index 0000000..8db8f7d --- /dev/null +++ b/.github/workflows/test_objectivec.yml
@@ -0,0 +1,43 @@ +name: Objective-c Tests + +on: + workflow_call: + inputs: + safe-checkout: + required: true + description: "The SHA key for the commit we want to run over" + type: string + +jobs: + macos: + strategy: + fail-fast: false # Don't cancel all jobs if one fails. + matrix: + include: + - name: OS X + flags: --core-only --skip-xcode-ios --skip-xcode-tvos + - name: iOS Debug + flags: --core-only --skip-xcode-osx --skip-xcode-tvos --skip-objc-conformance --skip-xcode-release + - name: iOS Release + flags: --core-only --skip-xcode-osx --skip-xcode-tvos --skip-objc-conformance --skip-xcode-debug + + name: ${{ matrix.name}} + runs-on: macos-12 + steps: + - name: Checkout pending changes + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + with: + ref: ${{ inputs.safe-checkout }} + + - name: Select pinned Xcode version + uses: maxim-lobanov/setup-xcode@9a697e2b393340c3cacd97468baa318e4c883d98 # v1.5.1 + with: + xcode-version: '14.1' + + - name: Run tests + uses: ./.github/actions/bazel + with: + credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} + bazel-cache: objectivec_macos/${{ matrix.name }} + bash: | + objectivec/DevTools/full_mac_build.sh ${{ matrix.flags }} --bazel-flags=\"$BAZEL_FLAGS\"
diff --git a/.github/workflows/test_php.yml b/.github/workflows/test_php.yml index 7023bf5..1e56abf 100644 --- a/.github/workflows/test_php.yml +++ b/.github/workflows/test_php.yml
@@ -34,7 +34,7 @@ version: 8.0.5-dbg command: composer test_valgrind - name: Linux PHP ${{ matrix.name}} + name: Linux ${{ matrix.name}} runs-on: ubuntu-latest steps: - name: Checkout pending changes @@ -48,3 +48,51 @@ image: us-docker.pkg.dev/protobuf-build/containers/test/linux/php:${{ matrix.version }}-6e95c0e221e4bd52e3b4dc1398c6336985196931 credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} command: ${{ matrix.command }} + + macos: + strategy: + fail-fast: false # Don't cancel all jobs if one fails. + matrix: + version: ['7.4', '8.0'] + + name: MacOS PHP ${{ matrix.version }} + runs-on: macos-12 + steps: + - name: Checkout pending changes + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + with: + submodules: recursive + ref: ${{ inputs.safe-checkout }} + + - name: Install dependencies + run: | + brew cleanup + brew install coreutils php@${{ matrix.version }} + brew services restart php@${{ matrix.version }} + # Configure path + PHP_FOLDER=$(find $HOMEBREW_PREFIX -type d -regex ".*php.*/7.4.[0-9_.]*" | sort -n | tail -n 1) + test ! -z "$PHP_FOLDER" + export PATH="$PHP_FOLDER/bin:$PATH" + echo "PATH=$PHP_FOLDER/bin:$PATH" >> $GITHUB_ENV + + - name: Check PHP version + run: php --version | grep ${{ matrix.version }} || (echo "Invalid PHP version - $(php --version)" && exit 1) + + - name: Run tests + uses: ./.github/actions/bazel + with: + credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} + bazel-cache: php_macos/${{ matrix.version }} + bash: | + pushd php + rm -rf vendor + php -v + php -m + composer update + composer test_c + popd + + bazelisk $BAZEL_STARTUP_FLAGS \ + test $BAZEL_FLAGS \ + --action_env=PATH --test_env=PATH \ + //php:conformance_test_c
diff --git a/.github/workflows/test_python.yml b/.github/workflows/test_python.yml index 66a624c..184d768 100644 --- a/.github/workflows/test_python.yml +++ b/.github/workflows/test_python.yml
@@ -42,3 +42,52 @@ credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} bazel-cache: python_linux/${{ matrix.type }}_${{ matrix.version }} bazel: test ${{ matrix.targets }} ${{ matrix.flags }} --test_env=KOKORO_PYTHON_VERSION + + + macos: + strategy: + fail-fast: false # Don't cancel all jobs if one fails. + matrix: + type: [ Pure, C++] + version: [ "3.7" ] + include: + - type: Pure + targets: //python/... @upb//python/... //python:python_version + - type: C++ + targets: //python/... //python:python_version + flags: --define=use_fast_cpp_protos=true + + name: MacOS ${{ matrix.type }} ${{ matrix.version }} + runs-on: macos-12 + steps: + - name: Checkout pending changes + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + with: + submodules: recursive + ref: ${{ inputs.safe-checkout }} + + - name: Fix Python version + uses: actions/setup-python@d27e3f3d7c64b4bbf8e4abfb9b63b83e846e0435 # v4.5.0 + with: + python-version: ${{ matrix.version }} + cache: pip + + - name: Validate version + run: python3 --version | grep ${{ matrix.version }} || (echo "Invalid Python version - $(python3 --version)" && exit 1) + + - name: Create and start virtual environment + run: | + python3 -m venv venv + source venv/bin/activate + + - name: Run tests + uses: ./.github/actions/bazel + env: + KOKORO_PYTHON_VERSION: ${{ matrix.version }} + with: + credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} + bazel-cache: python_macos/${{ matrix.type }}_${{ matrix.version }} + bazel: > + test ${{ matrix.targets }} ${{ matrix.flags }} + --test_env=KOKORO_PYTHON_VERSION=${{ matrix.version }} + --macos_minimum_os=10.9
diff --git a/.github/workflows/test_ruby.yml b/.github/workflows/test_ruby.yml index 44ee193..edd4204 100644 --- a/.github/workflows/test_ruby.yml +++ b/.github/workflows/test_ruby.yml
@@ -39,6 +39,36 @@ bazel-cache: ruby_linux/${{ matrix.ruby }}_${{ matrix.bazel }} bazel: test //ruby/... //ruby/tests:ruby_version --test_env=KOKORO_RUBY_VERSION + macos: + strategy: + fail-fast: false # Don't cancel all jobs if one fails. + matrix: + version: [ "2.7", "3.0", "3.1", "3.2" ] + + name: MacOS Ruby ${{ matrix.version }} + runs-on: macos-12 + steps: + - name: Checkout pending changes + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + with: + submodules: recursive + ref: ${{ inputs.safe-checkout }} + + - name: Fix Ruby version + uses: ruby/setup-ruby@ee26e27437bde475b19a6bf8cb73c9fa658876a2 # v1.134.0 + with: + ruby-version: ${{ matrix.version }} + + - name: Validate version + run: ruby --version | grep ${{ matrix.version }} || (echo "Invalid Ruby version - $(ruby --version)" && exit 1) + + - name: Run tests + uses: ./.github/actions/bazel + with: + credentials: ${{ secrets.GAR_SERVICE_ACCOUNT }} + bazel-cache: ruby_macos/${{ matrix.version }} + bazel: test //ruby/... --test_env=KOKORO_RUBY_VERSION=${{ matrix.version }} + test_ruby_gems: strategy: fail-fast: false
diff --git a/.github/workflows/test_runner.yml b/.github/workflows/test_runner.yml index 7524ce6..354d41d 100644 --- a/.github/workflows/test_runner.yml +++ b/.github/workflows/test_runner.yml
@@ -105,7 +105,7 @@ safe-checkout: ${{ needs.check-tag.outputs.checkout-sha }} secrets: inherit - ruby-install: + ruby: name: Ruby needs: [check-tag] uses: ./.github/workflows/test_ruby.yml @@ -128,3 +128,11 @@ with: safe-checkout: ${{ needs.check-tag.outputs.checkout-sha }} secrets: inherit + + objectivec: + name: Objective-c + needs: [check-tag] + uses: ./.github/workflows/test_objectivec.yml + with: + safe-checkout: ${{ needs.check-tag.outputs.checkout-sha }} + secrets: inherit
diff --git a/objectivec/DevTools/full_mac_build.sh b/objectivec/DevTools/full_mac_build.sh index 4fed4f5..366b394 100755 --- a/objectivec/DevTools/full_mac_build.sh +++ b/objectivec/DevTools/full_mac_build.sh
@@ -8,8 +8,6 @@ # Some base locations. readonly ScriptDir=$(dirname "$(echo $0 | sed -e "s,^\([^/]\),$(pwd)/\1,")") readonly ProtoRootDir="${ScriptDir}/../.." -readonly BazelFlags="--announce_rc --macos_minimum_os=10.9 \ - $(${ScriptDir}/../../kokoro/common/bazel_flags.sh)" # Invoke with BAZEL=bazelisk to use that instead. readonly BazelBin="${BAZEL:=bazel}" @@ -32,6 +30,8 @@ -r, --regenerate-descriptors Run generate_descriptor_proto.sh to regenerate all the checked in proto sources. + --bazel-flags + A set of flags to pass to any Bazel instances --core-only Skip some of the core protobuf build/checks to shorten the build time. --skip-xcode @@ -72,6 +72,8 @@ DO_XCODE_RELEASE=yes DO_OBJC_CONFORMANCE_TESTS=yes XCODE_QUIET=no +BAZEL_FLAGS="--announce_rc --macos_minimum_os=10.9" + while [[ $# != 0 ]]; do case "${1}" in -h | --help ) @@ -84,6 +86,10 @@ -r | --regenerate-descriptors ) REGEN_DESCRIPTORS=yes ;; + --bazel-flags ) + BAZEL_FLAGS="$BAZEL_FLAGS $1" + shift + ;; --core-only ) CORE_ONLY=yes ;; @@ -181,16 +187,16 @@ if [[ "${CORE_ONLY}" == "yes" ]] ; then header "Building core Only" - "${BazelBin}" build //:protoc //:protobuf //:protobuf_lite $BazelFlags + "${BazelBin}" build //:protoc //:protobuf //:protobuf_lite $BAZEL_FLAGS else header "Building" # Can't issue these together, when fully parallel, something sometimes chokes # at random. - "${BazelBin}" test //src/... $BazelFlags + "${BazelBin}" test //src/... $BAZEL_FLAGS fi # Ensure the WKT sources checked in are current. -BAZEL="${BazelBin}" objectivec/generate_well_known_types.sh --check-only $BazelFlags +BAZEL="${BazelBin}" objectivec/generate_well_known_types.sh --check-only $BAZEL_FLAGS header "Checking on the ObjC Runtime Code" # Some of the kokoro machines don't have python3 yet, so fall back to python if need be. @@ -317,7 +323,7 @@ if [[ "${DO_OBJC_CONFORMANCE_TESTS}" == "yes" ]] ; then header "Running ObjC Conformance Tests" - "${BazelBin}" test //objectivec:conformance_test $BazelFlags + "${BazelBin}" test //objectivec:conformance_test $BAZEL_FLAGS fi echo ""