The CI mirror branches are now created and deleted on the fly. No more overhead to maintain them (i.e. resolving rebase conflict).
This is partial implementation of what has been requested in this feature request https://github.com/travis-ci/travis-ci/issues/3719.
A test case is considered passed when the html exits as the result of emscripten_force_exit() function being called, which happens when the engine's elapsed time reaches URHO3D_TEST_TIMEOUT seconds. When something goes wrong, the engine's elapsed time does not progress as per normal, in this case the emrun's timeout would kick in and terminate the test case with failed exit status. The EMRUN'S timeout is set to be 2 times URHO3D_TEST_TIMEOUT auotmatically.
Add new build option EMSCRIPTEN_EMRUN_BROWSER to select which browser to use for testing. Default is 'firefox'. Refer to https://github.com/kripken/emscripten/issues/3234 to apply the recommended Firefox preference setting for emrun.
At the moment the 'make test' cannot be run non-interactively yet on Linux host and Mac OS X host systems due to what-could-be a bug in 'emrun' script. The issue with 'emrun' has been reported to upstream (https://github.com/kripken/emscripten/issues/3234).
Simplify the custom command for share data generation since we are not going to "fix" the UUID issue of the file_packager.py anymore. Although this would mean the slightest change in the output JS file caused by UUID change could force a long relink process in our build.
For Travis CI - upload Emscripten HTML5 samples to Urho3D main website.
[ci package]
The main Ruby thread outputs '.' character while waiting for the worker thread to complete. This should avoid Travis-CI from thinking the install process has stalled.
Use EMSCRIPTEN_ROOT_PATH environment variable to specify the root path to the emscripten, instead of the original EMSCRIPTEN environment variable exported in emsdk_set_env.sh.
This is because the original EMSCRIPTEN environment variable name clashes with our build scripts.
Enhance build scripts to handle source tree and build tree with spaces.
Fix PCH generation with incorrect compiler flags caused by -fPIC and -fpic from being added at the same time.
Fix compiler warning on Android platform with PCH enabled on the external main project due to CMake bug in 'VISIBILITY_INLINES_HIDDEN' implementation.
Close#637.
When the '<platform-specific>_build_tree' or 'build_tree' argument is provided then use it as the build tree path, otherwise use the default build tree path as before.
The '<platform-specific>_build_tree' takes precedence over 'build_tree'.
So that they do not get re-uploaded again the second time when uploading the 64-bit RPM package with URHO3D_USE_LIB64_RPM build option set.
[ci package]
Add new build options for specifying tool-prefix and target-sysroot in cross-compiling build.
Add new IOS_SYSROOT variable to store the path to iOS sysroot and use it to set CMAKE_FIND_ROOT_PATH variable.
Now also generate pkg-config Urho3D.pc for iOS platform.
For Travis CI - simplify SDK installation logic. Use DESTDIR=~ to avoid sudo.
Add new build options to override 64-bit Linux package setup for Debian and Redhad -based host systems.
For Travis CI - fix 64-bit RPM package generation to install library in /usr/lib64, also fix external project build test using Urho3D library from SDK.
Also:
- fix Android-CI build which does not need the symlink creation in the first place.
- fix an existing Xcode build configuration bug which was left undetected until now.
Now this rule is applicable for all target platforms (Linux, Windows, Android, and Raspberry-Pi) which have their CI builds run on Linux/Ubuntu host VM. Mac OSX and iOS CI builds are not affected by this rule since they run on OSX host VM which is not susceptible to "bad VM" issue. The idea is to reduce memory consumption during the linking phase and thus avoiding the process being killed due to insufficient memory in the VM.
On normal commit, use the origin/master. On git tagging commit, use the 'tag' branch.
Also when on git taggig commit, prevent API doc update on the master branch because it is already too late to do so as the commit won't be in the tag anyway.
This is because the detached head may actually move due to API documentation update, so $TRAVIS_BRANCH environment variable may actually just point to HEAD~ in this scenario, which was not good as it would cause CI mirror branches became being pushed twice unnecessarily, one for HEAD~ and one for HEAD.
Using HEAD should work equally well for both normal commit and release tagging commit.
The following changes address the shortcomings of our current release mechanism detected from our last release.
- Define and set RELEASE_TAG environment variable only when a git tag conform to a release tagging matching regex "\d+\.\d+".
- Change the logic to allow the automated rake tasks to be triggered on a 'tag' branch properly.
- Fix the 'git rebase' command to use the branch pointed by TRAVIS_BRANCH environment variable as baseline, instead of assuming it to be always 'origin/master' as before.
- Change Urho3D library versioning CMake module to omit the version patch number when there is none, i.e. 1.32 instead of 1.32.0.
General build script cleanup:
- Constrain build option values in cmake-gui.
- Constrain build configuration for both multi-configuration and single-configuration generators.
- Mark cached variables as advanced or internal as appropriate.
- Add initial support for ndk-gdb. Enable via new 'URHO3D_NDK_GDB' build option.
- Enhance rake android task: more effective loop to wait for Android device, ability to pick library to run from SampleLauncher from the adb shell.
- Fix "buildvm" tool name for Android to derive from the correct NDK ABI CMake's variable.
- Fix Android toolchain to copy shared STL library to the correct Android library output directory.
There is no point to wait for AVD to start. By the time the CI finishes the build, if the emulator is able to start the AVD then it should have been already done so.
On non-CI environment, the build time could still be much faster than the emulator starting the AVD, thus the function to wait for AVD is still useful in non-CI environment.
AVD with API level 21 seems to take longer to start. Also when the AVD failed to start in time, CI now skips the APK installation/launching test and considers the whole build as passed.
These new CI builds will perform the build test on the DirectX code path which is currently not covered in any of our existing CI.
The CI builds should also improve the detection of any breakage caused by build script changes for MinGW compiler.
The threshold is currently set to 20 minutes (can be adjusted). If by the given threshold time the iOS build has not reached the checkpoint then the universal binary build is skipped automatically.
When Travis CI is overloaded, the CI builds tend to get longer. Our iOS 32-bit and 64-bit CI build are usually finished very close to the 50 minutes time limit but may overshoot to pass the limit when Travis CI is overloaded. Using the xcpretty only helps in reducing the log size but it cannot help in this case. This commit disables again the universal binary build for the 64-bit iOS build when packaging the build artifact. The Mach-O universal binary build for 32-bit iOS build may be disabled too in the near future when we get more samples or the overloaded situation gets worse.
On non-CI environment, the device may already be created and just being reattached to the daemon. The unlock key event should only be sent after the device is ready (the launcher is running nd no more bootanimation process).
Occassionally there could be multiple successive commits causing multiple CI jobs queue up in the Travis CI. Due to latency of each jobs, the jobs may finish not in the same order as the commits. If the CI build happens to be instructed to perform package upload then the uploaded packages may come in not in the right order as the result.
For Travis CI - set the iOS deployment target to 7.0 explicitly but have to bump the OSX deployment target to 10.8 because Travis-CI only have 10.8 and 10.9 SDKs installed.
[ci package]
If the option is not set, Urho3D CMake build script by default configures it to match the currently running OS X version. On Travis-CI that is 10.9 which is too high for binary packaging. Closes#447.
[ci package]
- Simplify the check on environment variable containing the commit-ish used in the 'git describe' command.
- Shuffle the rebase order in 'ci_rebase' rake task, move the OSX-CI rebase to the last as OSX Travis-CI build environment is extremely slow lately (has longer job queue).
- Improve 'android' rake task to only create named AVD for CI test when necessary and to turn off graphics acceleration explicitly when starting the emulator in CI environment.
- Add more memory diagnostics to help in investigation of process being killed by Travis CI upstream issue reported in #430.
Simplify build artifact housekeeping logic as now all the mirror CI branches will produce the same package description as the master branch.
[ci package]
The hard-coded depth=2000 may not be a good estimate of how deep we should go in order to get the last annotated tag. Also move the operation to 'ci' rake task so it can be shared for all the Travis-CI build environments.
Cannot enable hardware acceleration in the Travis CI VM, so just check the sign of Urho3D from being started instead of checking the engine is fully initialized.
This should prevent the similar incident like SONAME breaking Android APK went unnotice for days.
Also:
- Revert back the workaround attempt for the RPI build as it did not work. The build error problem has been reported to Travis-CI upstream issue log.
- Add new rake task to automate Android APK testing (tested on Linux platform only).
Also fix to properly exclude IOS 64-bit test run on OSX CI build environment, but thanks to this mistake we found another bigger mistake in the xcode_build error handling.
- Add Android API level environment variable.
- Prevent unnecessary enabling of CMake testing configuration when the build test cannot be performed for specific target platform.
- Fix missing 'abort' command on a number of error handling branches.
The errors include: git clone error, apt-get update/install error, download error, etc.
The purpose of this refactor is to clearly distinguish between Travis CI build error (caused by error on Travis side) and Travis CI build failure (caused by build or test failure on Urho3D side). Previous setup sometimes allowed build environment in error state to continue to proceed with software building phase due to inefficient branching logic.
- Remove other temporary workaround for MinGW CI build to see if changing to 'Release' build configuration is enough to fix the insufficient memory problem.
- Attempt to fix intermitten network problem when installing software packages for Rasperry-Pi CI build by delaying the massive sysroot git clone to the last. Read this blog (http://blog.travis-ci.com/2013-05-20-network-timeouts-build-retries/) on general network issue plaguing travis-ci.org.
This process is only carried out when building Doxygen documentation pages in the CI server because those pages are intended to be embedded inside a Jekyll template.
Closes https://github.com/urho3d/urho3d.github.io/issues/3.
Also reverting back the scripting done for one time documentation build.
[ci skip]
- Fix commit message when performing API documentation update.
- Use single process when packaging to prevent make process being killed due to out of memory.
- Use one less process when building samples for MinGW/64-bit/STATIC target due to out of memory.
- Use commit-ish to describe the version number when renaming source package.
Temporary workaround due to Travis-CI insufficient memory when building AssetImporter concurrently with other samples in 64-bit/MinGW/STATIC build configuration.
Replace usage of URHO3D_INSTALL_PREFIX environment variable with the more standard CMake's own CMAKE_PREFIX_PATH environment variable to define prefix path of non-standard SDK installation location.
This is necessary because the last two CI builds have failed for MinGW static library build due to insufficient memory during linking phase.
Also:
- Increase the number of build artifacts being kept in the SourceForge.net.
- Fixes#380 by skipping Mach-O binary (universal library) for iOS 64-bit build. The Urho3D lib in the build artifact will only contain 64-bit arch, 32-bit arch and iphonesimulator are excluded for now to reduce the build time.
- Fix android toolchain to correctly set the library output path when ANDROID_ABI build option changes.
- For Travis CI - download and setup Android SDK on the fly when performing Android packaging.
- Final apk is included in the binary package.
When a release tag is detected in a commit, instruct CI build to perform a released package build that uploaded into release directory instead of Snapshots directory.
[ci package]
- When performing CI build for iOS platform, suppress all warnings. Non-CI build will still receive them.
- Automatically instruct Travis CI to do packaging when AngelScript or LuaScript API have changed.
Additionally, enhance iOS-specific Urho3D_universal custom target to perform initial check to see a rebuild is really necessary.
[ci package]
Travis-CI Ubuntu build environment requires additional software package to generate RPM package.
Travis-CI does not like iOS 64-bit build that generates >4MB log and kills the build process. Workaround by trying to rebuild universal binary quietly, hopefully the rebuild would not exceeds 10 minutes or otherwise Travis-CI would kill the process again for the other reason: no log activity. Finger cross.
- Prevent packaging from being accidentally invoked by a pull request or a commit on non-master branch.
- Generate documentation before packaging if it is not yet generated in previous step.
- When packaging for iOS platform, rebuild Urho3D library as Mach-O universal binary.
- When packaging for Linux platform, also invokes RPM and Debian CPack generators.
- Perform shallow clone when building site documentation to speed up cloning process.
- Perform unshallow pull when packaging so that 'git describe' gives correct commit count since last tag.
- Only perform packaging when all the previous steps are successful. Reduce chances of binary package with not up-to-date documentation.
- When packaging for iOS platform, generate the documentation quietly (no stdout but still stream error to stderr).
Detected by Travis CI build. With this change, FindUrho3D module should be able to find Urho3D libs in the following scenarios:
- only debug version is available
- only release version is available
- both debug version and release version are available
Request CI build to use a Release build configuration [ci package].
The purpose of Urho3D-CMake-common module is to store all the commonly used CMake commands and macros in one place so that they can be reused by other external projects using Urho3D as external library by simply including this module in their own CMakeList.txt.
- Fix finding Urho3D library when only debug version is available.
- Keep the library dependencies in the list as they are, even if that means a same library being listed twice (to fix dynamic library build for Windows platform).
- MinGW cross-compiling toolchain already has PIC flag set by default, so skip setting it one more time (to suppress compiler warnings spam).
Also:
- Enhance generated Eclipse project setting file to additionally use gcc/g++ error parser.
- Enhance cmake_gcc.sh script to fallback to find alternative CMake toolchains directory.
- Enhance Rakefile:
- New scaffolding task to create new project using Urho3D as external library. At the moment only works in Unix-like platforms.
- Build in Debug mode instead of Release mode as it should capture more potential issues.
The API documentation update is expected to fail when remote HEAD moves (i.e. there are new pushes while Travis CI build is in progress). Enhance the script one more time so that it always attempts to update API documentation on every build.
Due to git push failure from detached HEAD, the error log in Travis CI build contains GH_TOKEN for worker account. A new GH_TOKEN is now generated.
Enhance the script so that it does not spit out any output or error when pushing. The script still can rely on command exit status, however.
Also:
- Setup doxygen configuration on the fly to use minimal theme and to produce SVG instead of PNG.
- Change how the GH_TOKEN is supplied as the GIT version in Travis VM (Ubuntu) does not seem to read the credentials from file store correctly.
- Only generate site documentation after the CI build test has passed.
- Add Ubuntu PPA to install a more recent version of Doxygen.