dependencies { compile project(":p4base") compile project(":client-java") compile project(":deployment") compile fileTree(dir: 'vendor', include: '*.jar', exclude: '*-sources.jar') } // Please note that the JNA dependency is not downloaded from Maven central. dependencies { vendor "commons-net:commons-net:3.3" vendor "commons-net:commons-net:3.3:sources" vendor 'net.lingala.zip4j:zip4j:1.3.2' vendor 'net.lingala.zip4j:zip4j:1.3.2:sources' vendor 'io.jsonwebtoken:jjwt:0.6.0' vendor 'io.jsonwebtoken:jjwt:0.6.0:sources' vendor 'org.apache.logging.log4j:log4j-core:2.5' vendor 'org.apache.logging.log4j:log4j-core:2.5:sources' vendor 'org.apache.logging.log4j:log4j-slf4j-impl:2.5' vendor 'org.apache.logging.log4j:log4j-slf4j-impl:2.5:sources' } configurations { vendor.exclude group: "org.slf4j", module: "slf4j-api" } // This will create a "fat jar" jar { archiveName "automation.jar" dependsOn configurations.runtime from { configurations.runtime.collect { it.isDirectory() ? it : zipTree(it) } } manifest { attributes("Main-Class": "com.perforce.hws.automation.Basic16_1EnvironmentSetup") } } task basicMainlineEnvironmentSetup(type: JavaExec) { description 'Starts and initializes a basic p4d for typical HWS usage (note RUNS IN FOREGROUND)' classpath = sourceSets.main.runtimeClasspath main = 'com.perforce.hws.automation.BasicMainlineEnvironmentSetup' } task basic16_1EnvironmentSetup(type: JavaExec) { description 'Starts and initializes a basic p4d for typical HWS usage (note RUNS IN FOREGROUND)' classpath = sourceSets.main.runtimeClasspath jvmArgs "-Dlog4j.configurationFile=${file('./log4j.xml').canonicalPath}" main = 'com.perforce.hws.automation.Basic16_1EnvironmentSetup' } task cloudEnvironmentSetup(type: JavaExec) { description 'Starts and initializes p4d and mock_raymond for Helix Cloud testing' classpath = sourceSets.main.runtimeClasspath main = 'com.perforce.hws.automation.CloudEnvironmentSetup' } task cleanup(type: JavaExec) { description 'Shuts down all applications running in the background' classpath = sourceSets.main.runtimeClasspath jvmArgs "-Dlog4j.configurationFile=${file('./log4j.xml').canonicalPath}" main = 'com.perforce.hws.automation.Cleanup' } task createRPM(type: JavaExec) { description 'Uses rpmbuild to create an .rpm from the binary archive in standard EC location' classpath = sourceSets.main.runtimeClasspath main 'com.perforce.hws.automation.CreateRPM' args file('../../../p4-bin/bin.noarch/helix-web-services-bin.tar.gz').canonicalPath, file('../helix-web-services-rpm.tgz').canonicalPath } task createRPMLocal(type: JavaExec) { description 'Uses rpmbuild to create an .rpm from the binary archive in local install4j location' classpath = sourceSets.main.runtimeClasspath main 'com.perforce.hws.automation.CreateRPM' args file('../install4j/build/helix-web-services-bin.tar.gz').canonicalPath, file('../helix-web-services-rpm.tgz').canonicalPath } task deployBinaryArchive(type: JavaExec) { description 'Deploys our binary archive file' classpath = sourceSets.main.runtimeClasspath jvmArgs "-Dlog4j.configurationFile=${file('./log4j.xml').canonicalPath}" main 'com.perforce.hws.automation.DeployBinaryArchive' if (System.getProperty("os.name").startsWith("Windows")) { args file('../../../p4-bin/bin.ntx64/helix-web-services-bin-pretest.zip').canonicalPath } else { args file('../../../p4-bin/bin.noarch/helix-web-services-bin-pretest.tar.gz').canonicalPath } } task deployDebPackage(type: JavaExec) { description 'Deploys the .deb package' classpath = sourceSets.main.runtimeClasspath main 'com.perforce.hws.automation.DeployDebPackage' jvmArgs "-Dlog4j.configurationFile=${file('./log4j.xml').canonicalPath}" args file('../../../p4-bin/bin.ubuntu12x86_64/helix-web-services-deb-pretest.tgz').canonicalPath } task deployRpmPackage(type: JavaExec) { description 'Deploys the .rpm package' classpath = sourceSets.main.runtimeClasspath main 'com.perforce.hws.automation.DeployRpmPackage' jvmArgs "-Dlog4j.configurationFile=${file('./log4j.xml').canonicalPath}" args file('../../../p4-bin/bin.centos6x86_64/helix-web-services-rpm-pretest.tgz').canonicalPath } task upgradeDebPackage(type: JavaExec) { description 'Deploys the .rpm package' classpath = sourceSets.main.runtimeClasspath main 'com.perforce.hws.automation.UpgradeDebPackage' jvmArgs "-Dlog4j.configurationFile=${file('./log4j.xml').canonicalPath}" args file("./packages/ubuntu-12/helix-web-services_2016.1.0-1387282_amd64.deb").canonicalPath, file('../../../p4-bin/bin.ubuntu12x86_64/helix-web-services-deb-pretest.tgz').canonicalPath } task deploymentCleanup(type: JavaExec) { description 'Cleans up installed environment (must be run as root)' classpath = sourceSets.main.runtimeClasspath jvmArgs "-Dlog4j.configurationFile=${file('./log4j.xml').canonicalPath}" main = 'com.perforce.hws.automation.DeploymentCleanup' } task gitFusionEnvironmentSetup(type: JavaExec) { description 'Starts and initializes p4d (16.1), HWS, and git fusion, for HWS integration' classpath = sourceSets.main.runtimeClasspath main = 'com.perforce.hws.automation.GitFusionEnvironmentSetup' } task simulateEcBuild(type: JavaExec) { description 'Simulates hws.build job locally' classpath = sourceSets.main.runtimeClasspath main = 'com.perforce.hws.automation.SimulateECBuild' } task simulateEcTestBinaryTgz(type: JavaExec) { description 'Simulates hws.test-binary-tgz job locally' classpath = sourceSets.main.runtimeClasspath main = 'com.perforce.hws.automation.SimulateECTestBinaryTgz' } task simulateEcTestBinaryZip(type: JavaExec) { description 'Simulates hws.test-binary-zip job locally' classpath = sourceSets.main.runtimeClasspath main = 'com.perforce.hws.automation.SimulateECTestBinaryZip' } task simulateEcTestDeb(type: JavaExec) { description 'Simulates hws.test-binary-tgz job locally' classpath = sourceSets.main.runtimeClasspath main = 'com.perforce.hws.automation.SimulateECTestDeb' } task simulateEcRpm(type: JavaExec) { description 'Simulates hws.rpm job locally (run on a CentOS machine)' classpath = sourceSets.main.runtimeClasspath main = 'com.perforce.hws.automation.SimulateECRpm' } task simulateEcTestRpm(type: JavaExec) { description 'Simulates hws.test-rpm job locally (run on a CentOS machine)' classpath = sourceSets.main.runtimeClasspath main = 'com.perforce.hws.automation.SimulateECTestRpm' } task createJwtSigningToken(type: JavaExec) { description 'Generates a random secure key for signing' classpath = sourceSets.main.runtimeClasspath main = 'com.perforce.hws.automation.CreateJwtSigningToken' }
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#32 | 19805 | ptomiak | Change HWS service name on OS X, kick off another build. | ||
#31 | 19769 | ptomiak | Back out changelist 1404458 | ||
#30 | 19760 | ptomiak | Rename Mac OS X service to com.perforce.HelixWebServices | ||
#29 | 19677 | tjuricek |
Do not follow symlinks when looking for things to clean up during deploymentCleanup. On Linux, this left the /etc/init.d/helix-ws symlink, which caused problems during the next test of the binary archive testing. |
||
#28 | 19671 | tjuricek | Configure log4j for gradle tasks to get console output | ||
#27 | 19557 | tjuricek |
Add test to ensure that /api/doc/ responds, and fix path to doc from version file. There is very odd classloading logic in spark for static files (as of 2.5). If you have a resource directory (like we do) it barfs if you try to capture that directory name as a "file-like" path with no trailing slash. This feels like a bug in Spark, but one I'm nonetheless not going to work around quickly. The link from the application version page now works, and we have a basic test to ensure that documentation is indeed being hosted correctly. |
||
#26 | 19553 | swellard | Move and rename clients | ||
#25 | 19535 | drobins | Refactor package names to hws | ||
#24 | 19445 | tjuricek | Fix the install4j-generated launcher (was using old WebApp class name), and add diagnostic messages for issues with DeployBinaryArchive. | ||
#23 | 19383 | tjuricek | Fixes to the "unpack the prerelease archive file" along with preliminary work on the RPM upgrade test suite. | ||
#22 | 19362 | tjuricek |
Initial approach to running an upgrade, which basically gets past one stupid issue where the trust files already exist. This is likely not going to be how we exactly test. We'll probably want to run some before and after verifications, for example, to modify configuration and ensure it isn't touched during upgrades. But it's a starting point for further work. |
||
#21 | 19338 | tjuricek |
Create custom reporting mechanism to allow for clear "multiple suite" reports... with logging! This standardizes on log4j 2 as the backend (was just used on the server side). We have an "in memory appender" that we use to capture results during testing, which we associate with each method run. The whole system spits out yaml files for each suite run, which are then read in via a final task and a single html report is spit out with ... everything... in it. |
||
#20 | 19235 | tjuricek | The server spec crud test didn't run as super (hence a failure) and we needed to wait for buffered reading to finish before moving ahead with background processes. | ||
#19 | 19002 | tjuricek |
Improve API to interact with multiple p4ds. The configuration now requires an explicit setting of what P4Ds HWS can talk to via the 'P4D config dir', where there's a file indicating connection settings per p4d, and importantly, an ID. This is the "server ID" referenced everywhere. Most methods now require a server ID to indicate which p4d to manipulate. In the future, it's likely we will interact with *multiple* p4d instances on some services. This completely removes the ability to run HWS as a kind of an "open proxy" to whatever p4d you want. Given the nature of the change and the lack of priority, we've removed Helix Cloud testing and disabled several methods from their "Helix Cloud" implementation. These will be relatively easy to bring back, we'll just need a new method from Raymond that lists the "allowed server IDs" that map to the HWS configured server IDs for a particular user. Another notable aspect of this change is the use of JSON Web Token to create our authentication key. We associate this key with an in-memory "session" that contains the P4D tickets we use to authenticate users. The JWT token, by default, is assigned a timeout, which allows HWS to block further access to underlying servers without having to interact with multiple auth backends. If any backend fails with that session, the user will get a 403. If you disable the timeout, you'll need to ensure your clients clear out sessions. |
||
#18 | 18905 | tjuricek |
Add Git Fusion environent configuration and testing, and altered the implementation to use the newly defined API. Note: only runs on linux. We use latest GF production for testing and GF packages are linux only. The "integration" is pretty "light" at this point. This does require the test machine to have our package repository setup. |
||
#17 | 18846 | tjuricek |
Added test setups for p4d versions going back to r14.1. There is now a big single testng test suite that runs through most of these variations. I've switched to using the p16.1 builds by default, which can easily be switched to the r16.1 builds. Mainline p4d builds are still in use, since they are informative. We may want to not use those on candidate line runs, however. |
||
#16 | 18795 | tjuricek | Use point-release versioning for the client SDKs and installers. | ||
#15 | 18679 | tjuricek |
Revising HWS paths to work primarily at product version 2016.1. The swagger definitions will primarily work at a major platform release number. We will generate new clients for each major release, and ensure backwards compatibility as time goes on by keeping the older clients around in the tree. Note: These are JUST URLs, and do not include other revisions we plan on making shortly. |
||
#14 | 18667 | tjuricek | Using the perl variable subsitution mechanism instead of the windows batch file method to sub variables. | ||
#13 | 18515 | tjuricek |
Replacing java_client with Swagger-based clients/java project. - Switched implementations of the Swagger client to use okhttp with gson. - Added the version to the "status" method, and hey, added that method to the spec - Added templates to the java code generator to add some default methods, fixing some import issues in Gradle NOTE: We may want to break down the API a bit and restructure it. |
||
#12 | 18467 | tjuricek | Windows "binary archive" distribution testing (and automation) | ||
#11 | 18291 | tjuricek |
Build revisions: testing all Linux variations, plus other workflow refinements. - Added jobs to test rpms and debs - hws.archive is now "hws.build", since it builds pretty much everything (except .rpm) - hws.test-binary-archive is now hws.test-binary-tgz (there is a .zip archive that will be tested) - tagging initial versions of deployables to be tested as "pretest". Official versions will have that -pretest thing removed. - Integrated package signing for successful tests, which also means ubuntu12 and ubuntu14 will both get the same package signed but organized for each variation separately - Added tasks to launch the EC build simulator script so I don't have to figure out where I need to call it, what the platform ID is, etc. - Removed "hws.package" task |
||
#10 | 18277 | tjuricek | Removed 'rpm' media type from install4j (awaiting features in next version) and adding Linux package, OS X, and Windows automation for deployment and cleanup. | ||
#9 | 18273 | tjuricek | Add automation implementation to deploy the binary archive on Linux and Windows | ||
#8 | 18269 | tjuricek |
Consolidating common cleanup logic in jobs. Calling deployment cleanup before normal cleanup to ensure uninstallation happens first. Switching path syntax, the earlier mechanism may not have used absolute paths. |
||
#7 | 18268 | tjuricek |
Issuing deployment cleanup before testing deployment. When creating RPMs, specifying the absolute target path, which may be launched in the automation/ directory. |
||
#6 | 18240 | tjuricek | Add deployment cleanup task (needs to run as sudo) and fix paths to binary archives in automation tasks. | ||
#5 | 18236 | tjuricek | Add automation to deploy the binary archive (Linux-only right now) and remove build.sh wrapper. | ||
#4 | 18235 | tjuricek | Remove old omnibus packaging logic. | ||
#3 | 18234 | tjuricek |
Switched to gradle to drive the "hws.archive" build logic. While not absolutely critical, the main build system logic now runs on all OSes. The main trick is to understand that testing tasks can list a "finalizer" dependency to clean up even in the case of failure. The RVM logic will be "pushed out" into the build.conf. Given that we only need Ruby for mock_raymond (the Helix Cloud tests) this isn't that crazy. |
||
#2 | 17144 | tjuricek |
Prepare build for java-land / Ignore trust settings for non-SSL connections. build.sh now depends upon java basically being correctly installed. (Java 8 JDK with JCE for p4 SSL connections.) |
||
#1 | 17140 | tjuricek |
Integrating porting work from development branch. This work is now ready for testing/CD integration. |