cgit logo index : vaadin-framework.git
Vaadin 6
language: java
sudo: false

jdk:
  - pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight .c { color: #888888 } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { color: #008800; font-weight: bold } /* Keyword */
.highlight .ch { color: #888888 } /* Comment.Hashbang */
.highlight .cm { color: #888888 } /* Comment.Multiline */
.highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */
.highlight .cpf { color: #888888 } /* Comment.PreprocFile */
.highlight .c1 { color: #888888 } /* Comment.Single */
.highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .gr { color: #aa0000 } /* Generic.Error */
.highlight .gh { color: #333333 } /* Generic.Heading */
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #666666 } /* Generic.Subheading */
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008800 } /* Keyword.Pseudo */
.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */
.highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */
.highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */
.highlight .na { color: #336699 } /* Name.Attribute */
.highlight .nb { color: #003388 } /* Name.Builtin */
.highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */
.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */
.highlight .nd { color: #555555 } /* Name.Decorator */
.highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */
.highlight .nl { color: #336699; font-style: italic } /* Name.Label */
.highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */
.highlight .py { color: #336699; font-weight: bold } /* Name.Property */
.highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #336699 } /* Name.Variable */
.highlight .ow { color: #008800 } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */
.highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */
.highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */
.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */
.highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */
.highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */
.highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */
.highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */
.highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */
.highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */
.highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */
.highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */
.highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */
.highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */
.highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */
.highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */
.highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */
.highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */
.highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */
.highlight .vc { color: #336699 } /* Name.Variable.Class */
.highlight .vg { color: #dd7700 } /* Name.Variable.Global */
.highlight .vi { color: #3333bb } /* Name.Variable.Instance */
.highlight .vm { color: #336699 } /* Name.Variable.Magic */
.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
#coding=UTF-8

### Helper class for wildfly deployments. ###
# Related files $HOME/.deploy-url $HOME/.deploy-credentials

import sys, json
try:
	import requests
except Exception as e:
	print("DeployHelpers depends on requests library. Install it with `pip install requests`")
	sys.exit(1)
from requests.auth import HTTPDigestAuth
from os.path import join, expanduser, basename
from BuildHelpers import parser, getArgs
from time import sleep

group = parser.add_mutually_exclusive_group(required=True)
group.add_argument("--deploy", dest="deploy_mode", help="Deploy to a remote Wildfly instance", action="store_true")
group.add_argument("--docker", dest="deploy_mode", help="Wrap results into a Docker image", action="store_false")

parser.add_argument("--deployUrl", help="Wildfly management URL to use with --deploy")
parser.add_argument("--deployUser", help="Deployment user to use with --deploy", default=None)
parser.add_argument("--deployPass", help="Deployment password to use with --deploy", default=None)

serverUp = None

def testServer():
	global serverUp

	if serverUp is not None:
		return serverUp
	if getUrl() is None:
		print("No deploy URL provided")
		serverUp = False
		return serverUp

	print("Checking server status")
	i = 0
	request = {"operation" : "read-attribute", "name" : "server-state"}
	serverUp = False
	while not serverUp and i < 2:
		try:
			print("Trying on url %s" % (getUrl()))
			result = doPostJson(url=getUrl(), auth=getAuth(), data=json.dumps(request))
			response = result.json()
			if "outcome" not in response or response["outcome"] != "success":
				# Failure
				raise Exception(response)
			elif "result" not in response or response["result"] != "running":
				# Another failure
				raise Exception(response)
			# All OK
			serverUp = True
			print("Got server connection.")
		except Exception as e:
			print("Exception while checking server state: ", e)
			print("Server connection failed, retrying in 5 seconds.")
			i = i + 1
			sleep(5)
	return serverUp

# Helper for handling the full deployment
# name should end with .war
def deployWar(warFile, name=None):
	if not testServer():
		raise Exception("Server not up. Skipping deployment.")
		return
	if name is None:
		name = basename(warFile).replace('.war', "-%s.war" % (getArgs().version.split('-')[0]))

	print("Deploying to context %s" % (name[:-4]))
	# Undeploy/Remove old version if needed
	if deploymentExists(name):
		removeDeployment(name)
	# Do upload war file
	hash = doUploadWarFile(warFile)
	# Do deployment under name
	doDeploy(hash, name)

def deploymentExists(name):
	# Deployment existence check data
	data = {"operation" : "read-attribute", "name": "runtime-name", "address": [{"deployment" : name}]}
	result = doPostJson(url=getUrl(), auth=getAuth(), data=json.dumps(data))
	return result.json()["outcome"] == "success"

def doDeploy(hash, name):
	# Deployment data
	data = {}
	data["content"] = [{"hash" : hash}]
	data["address"] = [{"deployment" : name}]
	data["operation"] = "add"
	data["enabled"] = True
	return doPostJson(data=json.dumps(data), auth=getAuth(), url=getUrl())

# Helper for adding Content-Type to headers
def doPostJson(**kwargs):
	r = requests.post(headers={"Content-Type" : "application/json"}, **kwargs)
	# Wildfly gives code 500 when asking for a non-existent deployment
	if r.status_code == requests.codes.ok or r.status_code == 500:
		return r
	r.raise_for_status()

def doUploadWarFile(warFile):
	# Upload request, just see the outcome
	result = requests.post("%s/add-content" % (getUrl()), files={"file" : open(warFile, 'rb')}, auth=getAuth()).json()
	if "outcome" not in result or result["outcome"] != "success":
		raise Exception("File upload failed.", result)
	return result["result"]

# Method for removing an existing deployment
def removeDeployment(name):
	data = {}
	data["address"] = [{"deployment" : name}]
	for i in ["undeploy", "remove"]:
		print("%s old deployment of %s" % (i, name))
		data["operation"] = i
		doPostJson(data=json.dumps(data), auth=getAuth(), url=getUrl())

# Read credentials file and return a HTTPDigestAuth object
def getAuth():
	args = getArgs()
	return HTTPDigestAuth(args.deployUser, args.deployPass)

# Read the deploy url file and return the url
def getUrl():
	return getArgs().deployUrl
generated by cgit v1.2.3 (git 2.39.1) at 2025-07-27 12:03:12 +0000