From f0e9f4c9ee87bd5d0007dd7765bfe9a1698db3dc Mon Sep 17 00:00:00 2001 From: Morgan Pretty Date: Fri, 5 Apr 2024 11:14:24 +1100 Subject: [PATCH] Use default clone, moving codecov to no PR builds --- .drone.jsonnet | 241 ++++++++++++++++++++++++++----------------------- 1 file changed, 128 insertions(+), 113 deletions(-) diff --git a/.drone.jsonnet b/.drone.jsonnet index aea0c9b03..4366880ba 100644 --- a/.drone.jsonnet +++ b/.drone.jsonnet @@ -13,27 +13,9 @@ local version_info = { }; // Intentionally doing a depth of 2 as libSession-util has it's own submodules (and libLokinet likely will as well) -local custom_clone = { - name: 'Clone Repo', - environment: { CLONE_KEY: { from_secret: 'CLONE_KEY' } }, - commands: [ - ||| - if [ -z "$CLONE_KEY" ]; then - echo -e "\n\n\n\e[31;1mUnable to checkout repo: CLONE_KEY not set\e[0m" - exit 1 - fi - |||, - 'mkdir -p $HOME/.ssh && touch $HOME/.ssh/config && touch $HOME/.ssh/known_hosts', - 'echo "$CLONE_KEY" > $HOME/.ssh/id_ed25519_drone_ci_deploy', - 'chmod 600 $HOME/.ssh/config $HOME/.ssh/known_hosts $HOME/.ssh/id_ed25519_drone_ci_deploy', - 'ssh-keyscan -t ed25519 github.com >> $HOME/.ssh/known_hosts', - 'export GIT_SSH_COMMAND="ssh -i $HOME/.ssh/id_ed25519_drone_ci_deploy -F $HOME/.ssh/config -o UserKnownHostsFile=$HOME/.ssh/known_hosts"', - 'git -c init.defaultBranch=master init', - 'git remote add origin $DRONE_GIT_SSH_URL', - 'git fetch --depth=1 origin +$DRONE_COMMIT_REF', - 'git checkout $DRONE_COMMIT -b $DRONE_BRANCH', - 'git submodule update --init --recursive --depth=2 --jobs=4' - ] +local clone_submodules = { + name: 'Clone Submodules', + commands: [ 'git submodule update --init --recursive --depth=2 --jobs=4' ] }; // cmake options for static deps mirror @@ -77,7 +59,7 @@ local load_cocoapods_cache = { 'rm -f /Users/drone/.cocoapods_cache.lock' ], depends_on: [ - 'Clone Repo' + 'Clone Submodules' ] }; @@ -108,6 +90,74 @@ local update_cocoapods_cache(depends_on) = { depends_on: depends_on, }; +// Unit tests +// +// The following 4 steps need to be run in order to run the unit tests +local pre_boot_test_sim = { + name: 'Pre-Boot Test Simulator', + commands: [ + 'mkdir -p build/artifacts', + 'echo "Test-iPhone14-${DRONE_COMMIT:0:9}-${DRONE_BUILD_EVENT}" > ./build/artifacts/device_name', + 'xcrun simctl create "$(cat ./build/artifacts/device_name)" com.apple.CoreSimulator.SimDeviceType.iPhone-14', + 'echo $(xcrun simctl list devices | grep -m 1 $(cat ./build/artifacts/device_name) | grep -E -o -i "([0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12})") > ./build/artifacts/sim_uuid', + 'xcrun simctl boot $(cat ./build/artifacts/sim_uuid)', + 'echo "Pre-booting simulator complete: $(xcrun simctl list | sed "s/^[[:space:]]*//" | grep -o ".*$(cat ./build/artifacts/sim_uuid).*")"', + ] +}; + +local build_and_run_tests = { + name: 'Build and Run Tests', + commands: [ + 'NSUnbufferedIO=YES set -o pipefail && xcodebuild test -workspace Session.xcworkspace -scheme Session -derivedDataPath ./build/derivedData -resultBundlePath ./build/artifacts/testResults.xcresult -parallelizeTargets -destination "platform=iOS Simulator,id=$(cat ./build/artifacts/sim_uuid)" -parallel-testing-enabled NO -test-timeouts-enabled YES -maximum-test-execution-time-allowance 10 -collect-test-diagnostics never 2>&1 | xcbeautify --is-ci', + ], + depends_on: [ + 'Pre-Boot Test Simulator', + 'Install CocoaPods' + ], +}; + +local unit_test_summary = { + name: 'Unit Test Summary', + commands: [ + ||| + if [[ -d ./build/artifacts/testResults.xcresult ]]; then + xcresultparser --output-format cli --failed-tests-only ./build/artifacts/testResults.xcresult + else + echo -e "\n\n\n\e[31;1mUnit test results not found\e[0m" + fi + |||, + ], + depends_on: ['Build and Run Tests'], + when: { + status: ['failure', 'success'] + } +}; + +local delete_test_simulator = { + name: 'Delete Test Simulator', + commands: [ + 'xcrun simctl delete unavailable', + ||| + if [[ -f ./build/artifacts/sim_uuid ]]; then + xcrun simctl delete $(cat ./build/artifacts/sim_uuid) + fi + |||, + ||| + if [[ -z $(xcrun simctl list | sed "s/^[[:space:]]*//" | grep -o ".*2879BA18-1253-4EDC-B4AF-A21DAC3025DD.*") ]]; then + echo "Successfully deleted simulator." + else + echo "Failed to delete simulator!" + fi + ||| + ], + depends_on: [ + 'Build and Run Tests', + ], + when: { + status: ['failure', 'success'] + } +}; + [ // Unit tests (PRs only) { @@ -116,95 +166,16 @@ local update_cocoapods_cache(depends_on) = { name: 'Unit Tests', platform: { os: 'darwin', arch: 'arm64' }, trigger: { event: { exclude: [ 'push' ] } }, - clone: { disable: true }, steps: [ version_info, - custom_clone, + clone_submodules, load_cocoapods_cache, install_cocoapods, - { - name: 'Pre-Boot Test Simulator', - commands: [ - 'mkdir -p build/artifacts', - 'echo "Test-iPhone14-${DRONE_COMMIT:0:9}-${DRONE_BUILD_EVENT}" > ./build/artifacts/device_name', - 'xcrun simctl create "$(cat ./build/artifacts/device_name)" com.apple.CoreSimulator.SimDeviceType.iPhone-14', - 'echo $(xcrun simctl list devices | grep -m 1 $(cat ./build/artifacts/device_name) | grep -E -o -i "([0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12})") > ./build/artifacts/sim_uuid', - 'xcrun simctl boot $(cat ./build/artifacts/sim_uuid)', - 'echo "Pre-booting simulator complete: $(xcrun simctl list | sed "s/^[[:space:]]*//" | grep -o ".*$(cat ./build/artifacts/sim_uuid).*")"', - ] - }, - { - name: 'Build and Run Tests', - commands: [ - 'NSUnbufferedIO=YES set -o pipefail && xcodebuild test -workspace Session.xcworkspace -scheme Session -derivedDataPath ./build/derivedData -resultBundlePath ./build/artifacts/testResults.xcresult -parallelizeTargets -destination "platform=iOS Simulator,id=$(cat ./build/artifacts/sim_uuid)" -parallel-testing-enabled NO -test-timeouts-enabled YES -maximum-test-execution-time-allowance 10 -collect-test-diagnostics never 2>&1 | xcbeautify --is-ci', - ], - depends_on: [ - 'Pre-Boot Test Simulator', - 'Install CocoaPods' - ], - }, - { - name: 'Unit Test Summary', - commands: [ - ||| - if [[ -d ./build/artifacts/testResults.xcresult ]]; then - xcresultparser --output-format cli --failed-tests-only ./build/artifacts/testResults.xcresult - else - echo -e "\n\n\n\e[31;1mUnit test results not found\e[0m" - fi - |||, - ], - depends_on: ['Build and Run Tests'], - when: { - status: ['failure', 'success'] - } - }, - { - name: 'Delete Test Simulator', - commands: [ - ||| - if [[ -f ./build/artifacts/sim_uuid ]]; then - xcrun simctl delete $(cat ./build/artifacts/sim_uuid) - fi - |||, - ], - depends_on: [ - 'Build and Run Tests', - ], - when: { - status: ['failure', 'success'] - } - }, - update_cocoapods_cache(['Build and Run Tests']), - { - name: 'Install Codecov CLI', - commands: [ - 'pip3 install codecov-cli 2>&1 | grep "The script codecovcli is installed in" | sed -n -e "s/^.*The script codecovcli is installed in \\(.*\\) which is not on PATH.*$/\\1/p" > ./build/artifacts/codecov_install_path', - ||| - if [[ ! -s ./build/artifacts/codecov_install_path ]]; then - which codecovcli > ./build/artifacts/codecov_install_path - fi - |||, - '$(cat ./build/artifacts/codecov_install_path)/codecovcli --version' - ], - }, - { - name: 'Convert xcresult to xml', - commands: [ - 'xcresultparser --output-format cobertura ./build/artifacts/testResults.xcresult > ./build/artifacts/coverage.xml', - ], - depends_on: ['Build and Run Tests'] - }, - { - name: 'Upload coverage to Codecov', - commands: [ - '$(cat ./build/artifacts/codecov_install_path)/codecovcli upload-process --fail-on-error -f ./build/artifacts/coverage.xml', - ], - depends_on: [ - 'Convert xcresult to xml', - 'Install Codecov CLI' - ] - }, + pre_boot_test_sim, + build_and_run_tests, + unit_test_summary, + delete_test_simulator, + update_cocoapods_cache(['Build and Run Tests']) ], }, // Validate build artifact was created by the direct branch push (PRs only) @@ -214,16 +185,12 @@ local update_cocoapods_cache(depends_on) = { name: 'Check Build Artifact Existence', platform: { os: 'darwin', arch: 'arm64' }, trigger: { event: { exclude: [ 'push' ] } }, - clone: { disable: true }, steps: [ custom_clone, { name: 'Poll for build artifact existence', commands: [ './Scripts/drone-upload-exists.sh' - ], - depends_on: [ - 'Clone Repo' ] } ] @@ -235,10 +202,9 @@ local update_cocoapods_cache(depends_on) = { name: 'Simulator Build', platform: { os: 'darwin', arch: 'arm64' }, trigger: { event: { exclude: [ 'pull_request' ] } }, - clone: { disable: true }, steps: [ version_info, - custom_clone, + clone_submodules, load_cocoapods_cache, install_cocoapods, { @@ -264,4 +230,53 @@ local update_cocoapods_cache(depends_on) = { }, ], }, + // Unit tests and code coverage (non-PRs only) + { + kind: 'pipeline', + type: 'exec', + name: 'Simulator Build', + platform: { os: 'darwin', arch: 'arm64' }, + trigger: { event: { exclude: [ 'pull_request' ] } }, + steps: [ + version_info, + clone_submodules, + load_cocoapods_cache, + install_cocoapods, + pre_boot_test_sim, + build_and_run_tests, + unit_test_summary, + delete_test_simulator, + update_cocoapods_cache(['Build and Run Tests']), + { + name: 'Install Codecov CLI', + commands: [ + 'pip3 install codecov-cli 2>&1 | grep "The script codecovcli is installed in" | sed -n -e "s/^.*The script codecovcli is installed in (.*) which is not on PATH.*$/\1/p" > ./build/artifacts/codecov_install_path', + ||| + if [[ ! -s ./build/artifacts/codecov_install_path ]]; then + which codecovcli > ./build/artifacts/codecov_install_path + fi + |||, + '$(cat ./build/artifacts/codecov_install_path)/codecovcli --version' + ], + }, + { + name: 'Convert xcresult to xml', + commands: [ + 'xcresultparser --output-format cobertura ./build/artifacts/testResults.xcresult > ./build/artifacts/coverage.xml', + ], + depends_on: ['Build and Run Tests'] + }, + { + name: 'Upload coverage to Codecov', + environment: { CODECOV_TOKEN: { from_secret: 'CODECOV_TOKEN' } }, + commands: [ + '$(cat ./build/artifacts/codecov_install_path)/codecovcli upload-process --fail-on-error -f ./build/artifacts/coverage.xml', + ], + depends_on: [ + 'Convert xcresult to xml', + 'Install Codecov CLI' + ] + }, + ], + }, ]