Initial Successful Request¶
The developer is making the first request. The starting point is the base image and two empty PPAs.
User -> CLI¶
The user creates a request, providing a source package and binary packages to add.
python ubuntu-ci create_ticket -t "Ticket name" -d "Ticket description" -b 123 -o user@example.com -s /full/path/to/_source.changes -s /full/path/to/_source.changes
CLI -> Ticket System¶
The CLI creates a ticket through the ticket system, then pushes the source package files into the data store.
Create the ticket:
create_ticket {
"owner": "default-user@example.com",
"title": "Default title",
"description": "Default description",
"bug_id": "https://bugs.launchpad.net/bugs/1234567",
}
Returns:
"http://ticket-system-url:8000/api/v1/ticket/1/"
Create the source package upload:
create_source_package_upload {
"sourcepackage": "/api/v1/sourcepackage/X/",
"version": "1.5~dev.1"
}
Returns:
"http://ticket-system-url:8000/api/v1/spu/1/"
Create the sub-ticket for the source package:
create_subticket {
"source_package_upload": "/api/v1/spu/1/",
"ticket": "/api/v1/ticket/1",
"assignee": "default-user@example.com"
}
Returns:
"http://ticket-system-url:8000/api/v1/subticket/1/"
For each source package file, upload to the data store:
data_store = DataStore("ticket.1", "sources", public=True)
while open("autopilot_1.5~dev.1_source.changes") as f:
url = data_store.put_file("autopilot_1.5~dev.1_source.changes", f.read())
Returns (as ‘url’):
https://swift.canonistack.canonical.com/v1/AUTH_bucket_id/ticket.1.sources/autopilot_1.5~dev.1_source.changes"
then create the artifact:
create_artifact {
"name": "autopilot_1.5~dev.1_source.changes",
"subticket": "/api/v1/subticket/1/",
"reference": "https://swift.canonistack.canonical.com/v1/AUTH_bucket_id/ticket.1.sources/autopilot_1.5~dev.1_source.changes"],
"type": "SPU"
}
Returns:
"http://ticket-system-url:8000/api/v1/artifact/1/"
Ticket System -> Lander¶
The ticket system requests a build of the source packages and image through the lander:
execute_request {
"ticket_id": "1",
"source_packages": [
"https://swift.canonistack.canonical.com/v1/AUTH_bucket_id/ticket.1/autopilot_1.5~dev.1.diff.gz",
"https://swift.canonistack.canonical.com/v1/AUTH_bucket_id/ticket.1/autopilot_1.5~dev.1.dsc",
"https://swift.canonistack.canonical.com/v1/AUTH_bucket_id/ticket.1/autopilot_1.5~dev.1_source.changes"
],
"binary_packages": ["python-autopilot", "python3-autopilot"],
"series": saucy,
"base_image": "https://swift.canonistack.canonical.com/v1/AUTH_bucket_id/images/saucy-desktop-amd64.iso",
"progress_queue": "ticket-1-exchange"
}
Returns TBD result.
Lander -> PPA Assigner¶
The lander requests a PPA to perform the build:
get_ppa {
"ticket_id": 1
}
Returns:
"ppa:ci-team/ppa_build_1"
Lander -> Branch/Source Builder¶
The lander sends the source files to the ppa:
build_source {
"source_packages": [
"https://swift.canonistack.canonical.com/v1/AUTH_bucket_id/ticket.1/autopilot_1.5~dev.1.diff.gz",
"https://swift.canonistack.canonical.com/v1/AUTH_bucket_id/ticket.1/autopilot_1.5~dev.1.dsc",
"https://swift.canonistack.canonical.com/v1/AUTH_bucket_id/ticket.1/autopilot_1.5~dev.1_source.changes"
],
"ppa": "ppa:ci-team/ppa_build_1",
"progress_queue": "bsbuilder-1-exchange"
}
Returns:
Nothing (just a successful status code).
Branch/Source Builder -> Lander¶
Build progress messages are passed back via the progress queue:
TBD
Completion is signaled on the progress queue:
message {
"state": "COMPLETED",
}
Lander -> Image Builder¶
The lander requests a new image from the image builder:
build_image {
"base_image": {
"image_type": "CLOUD",
"url_list": [
"https://swift.canonistack.canonical.com/v1/AUTH_bucket_id/images/saucy-desktop-amd64.iso"
],
"series": "saucy",
"ppa_list": ["ppa:ci-team/ppa_build_1", "ppa:ci-team/ppa_archive"],
"package_list": ["python-autopilot", "python3-autopilot"],
"progress_queue": "image-builder-1-exchange"
}
Image Builder -> Lander¶
Build progress messages are passed back via the progress queue:
TBD
Completion and location of image is sent via a message on the progress queue:
message {
"state": "COMPLETED",
"url_list": [
"https://swift.canonistack.canonical.com/v1/AUTH_bucket_id/ticket.1/ticket.1.iso"
]
}
Lander -> Test Runner¶
The image and list of binary packages is sent to the test runner:
test_image {
"test_request_id": "1",
"image_url": "http://glance_url/image-1.iso",
"package_name": "unity8"
}
Test Runner -> Lander¶
Returns status through progress messages:
message {
"test_request_id": "1",
"message": "10%",
"current": "1",
"total": "10",
}
Test completion is signaled by a final progress message:
message {
"state": "COMPLETED",
"test_request_id": "1",
"status": "SUCCESS",
"test_result": "PASSED",
"artifacts": [
"https://swift.canonistack.canonical.com/v1/AUTH_bucket_id/ticket.1.test-runner/autopilot-run.log",
"https://swift.canonistack.canonical.com/v1/AUTH_bucket_id/ticket.1.test-runner/autopilot.xml"]
}
Lander -> Ticket System¶
The lander provides progress to the ticket system through the ticket system’s progress API:
TBD
Completion of a build is provided to the ticket system through the ticket system’s progress API:
TBD