kushaldas / autocloud Goto Github PK
View Code? Open in Web Editor NEWLicense: GNU Affero General Public License v3.0
License: GNU Affero General Public License v3.0
During service restart, or due to super bad images, we have few jobs as always running status. We need a command line tool which can mark those jobs as aborted in the DB, and will send out the corresponding fedmsg.
We used to only listen to scratch builds for images. But with a recent change koji is building the cloud/atomic images as real builds. This will require us to make a change in consumer.py based on changes like https://github.com/fedora-infra/fedimg/pull/47/files
Unless we do this, we will not be able to test F24 or RAWHIDE images.
It looks like autocloud supports API calls for JobDetails
via flask-restless. However, in quickly trying to determine how to use the API I'm met with a ProgrammingError
message every time.
Job 3596 exists. Trying to hit https://apps.fedoraproject.org/autocloud/api/job_details/3596 returns a ProgrammingError
.
Autocloud should not crash when new architectures get added....
[Sat Mar 04 14:13:26.245350 2017] [wsgi:error] [pid 7093] ERROR:autocloud.web.app:Exception on /jobs/ [GET]
[Sat Mar 04 14:13:26.245354 2017] [wsgi:error] [pid 7093] Traceback (most recent call last):
[Sat Mar 04 14:13:26.245355 2017] [wsgi:error] [pid 7093] File "/usr/lib/python2.7/site-packages/flask/app.py", line 1988, in wsgi_app
[Sat Mar 04 14:13:26.245357 2017] [wsgi:error] [pid 7093] response = self.full_dispatch_request()
[Sat Mar 04 14:13:26.245358 2017] [wsgi:error] [pid 7093] File "/usr/lib/python2.7/site-packages/flask/app.py", line 1641, in full_dispatch_request
[Sat Mar 04 14:13:26.245360 2017] [wsgi:error] [pid 7093] rv = self.handle_user_exception(e)
[Sat Mar 04 14:13:26.245362 2017] [wsgi:error] [pid 7093] File "/usr/lib/python2.7/site-packages/flask/app.py", line 1544, in handle_user_exception
[Sat Mar 04 14:13:26.245363 2017] [wsgi:error] [pid 7093] reraise(exc_type, exc_value, tb)
[Sat Mar 04 14:13:26.245365 2017] [wsgi:error] [pid 7093] File "/usr/lib/python2.7/site-packages/flask/app.py", line 1639, in full_dispatch_request
[Sat Mar 04 14:13:26.245366 2017] [wsgi:error] [pid 7093] rv = self.dispatch_request()
[Sat Mar 04 14:13:26.245368 2017] [wsgi:error] [pid 7093] File "/usr/lib/python2.7/site-packages/flask/app.py", line 1625, in dispatch_request
[Sat Mar 04 14:13:26.245369 2017] [wsgi:error] [pid 7093] return self.view_functions[rule.endpoint](**req.view_args)
[Sat Mar 04 14:13:26.245371 2017] [wsgi:error] [pid 7093] File "/usr/lib/python2.7/site-packages/autocloud/web/app.py", line 140, in job_details
[Sat Mar 04 14:13:26.245372 2017] [wsgi:error] [pid 7093] request.referrer, dict(request.args)).paginate()
[Sat Mar 04 14:13:26.245374 2017] [wsgi:error] [pid 7093] File "/usr/lib/python2.7/site-packages/autocloud/web/pagination.py", line 49, in paginate
[Sat Mar 04 14:13:26.245375 2017] [wsgi:error] [pid 7093] page_items = self.get_ordered_page_items()
[Sat Mar 04 14:13:26.245377 2017] [wsgi:error] [pid 7093] File "/usr/lib/python2.7/site-packages/autocloud/web/pagination.py", line 76, in get_ordered_page_items
[Sat Mar 04 14:13:26.245378 2017] [wsgi:error] [pid 7093] items = self.queryset.all()
[Sat Mar 04 14:13:26.245380 2017] [wsgi:error] [pid 7093] File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/query.py", line 2613, in all
[Sat Mar 04 14:13:26.245381 2017] [wsgi:error] [pid 7093] return list(self)
[Sat Mar 04 14:13:26.245382 2017] [wsgi:error] [pid 7093] File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/loading.py", line 86, in instances
[Sat Mar 04 14:13:26.245384 2017] [wsgi:error] [pid 7093] util.raise_from_cause(err)
[Sat Mar 04 14:13:26.245385 2017] [wsgi:error] [pid 7093] File "/usr/lib64/python2.7/site-packages/sqlalchemy/util/compat.py", line 202, in raise_from_cause
[Sat Mar 04 14:13:26.245387 2017] [wsgi:error] [pid 7093] reraise(type(exception), exception, tb=exc_tb, cause=cause)
[Sat Mar 04 14:13:26.245388 2017] [wsgi:error] [pid 7093] File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/loading.py", line 71, in instances
[Sat Mar 04 14:13:26.245390 2017] [wsgi:error] [pid 7093] rows = [proc(row) for row in fetch]
[Sat Mar 04 14:13:26.245391 2017] [wsgi:error] [pid 7093] File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/loading.py", line 428, in _instance
[Sat Mar 04 14:13:26.245396 2017] [wsgi:error] [pid 7093] loaded_instance, populate_existing, populators)
[Sat Mar 04 14:13:26.245398 2017] [wsgi:error] [pid 7093] File "/usr/lib64/python2.7/site-packages/sqlalchemy/orm/loading.py", line 486, in _populate_full
[Sat Mar 04 14:13:26.245400 2017] [wsgi:error] [pid 7093] dict_[key] = getter(row)
[Sat Mar 04 14:13:26.245401 2017] [wsgi:error] [pid 7093] File "/usr/lib64/python2.7/site-packages/sqlalchemy/sql/type_api.py", line 1030, in process
[Sat Mar 04 14:13:26.245403 2017] [wsgi:error] [pid 7093] return process_value(value, dialect)
[Sat Mar 04 14:13:26.245404 2017] [wsgi:error] [pid 7093] File "/usr/lib/python2.7/site-packages/sqlalchemy_utils/types/choice.py", line 169, in process_result_value
[Sat Mar 04 14:13:26.245406 2017] [wsgi:error] [pid 7093] return self.type_impl.process_result_value(value, dialect)
[Sat Mar 04 14:13:26.245407 2017] [wsgi:error] [pid 7093] File "/usr/lib/python2.7/site-packages/sqlalchemy_utils/types/choice.py", line 196, in process_result_value
[Sat Mar 04 14:13:26.245409 2017] [wsgi:error] [pid 7093] return Choice(value, self.choices_dict[value])
[Sat Mar 04 14:13:26.245410 2017] [wsgi:error] [pid 7093] KeyError: u'aarch64'
As of now we only store the koji build id so whenever we need to know image url and image name we need to query Koji and get the data regarding the build id.
Current datetime view on the list UI is ugly. We should make it better :)
Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/moksha/hub/api/consumer.py", line 191, in _work
self.consume(message)
File "/usr/lib/python2.7/site-packages/fedimg/consumers.py", line 71, in consume
cmetadata = fedfind.release.get_release_cid(compose_id).metadata
File "/usr/lib/python2.7/site-packages/fedfind/release.py", line 64, in get_release_cid
return get_release(cid=cid)
File "/usr/lib/python2.7/site-packages/fedfind/release.py", line 380, in get_release
(release, milestone, compose, respin) = parse_cid(cid)
File "/usr/lib/python2.7/site-packages/fedfind/release.py", line 337, in parse_cid
(release, date, typ, respin) = fedfind.helpers.parse_cid(cid)
File "/usr/lib/python2.7/site-packages/fedfind/helpers.py", line 347, in parse_cid
"compose ID!".format(origcid))
ValueError: Fedora_Docker-25-20170110.0 does not appear to be a valid Pungi 4 Fedora compose ID!
We now have /var/run/tunir/tunir_results.txt file for each run, which contains the results of each command. We should include that output to the results instead of the text printed on the stdout.
$subject
It would be very helpful if autocloud had an API. The only feature I'd immediately need is a very simple one: go to a URL and get the results of the autocloud test for a specific Koji build ID.
So for instance I could go to https://apps.fedoraproject.org/autocloud/api/v1/job/12604897 and get a simple JSON (or whatever) representation of the job; basically it could simply give all the JobDetails attributes except possibly 'output' (which is pretty big). You could obviously implement other end points, like one for listing/querying jobs, but I don't need that right now myself (dunno if anyone else does).
This should be really pretty trivial to implement with flask-restful or flask-restless - I think with flask-restless it'd be like a handful of lines of code. See https://flask-restless.readthedocs.org/en/latest/quickstart.html and https://flask-restful.readthedocs.org/en/latest/quickstart.html .
If you don't have cycles to work on this I can do it, but I think it might be a bit quicker for you if you don't mind :)
We should check Virtualbox before running Tunir. If it is broken, we should try to rebuild the kernel modules.
/etc/init.d/vboxdrv setup
If it is already queued, then do not enqueue the build/task.
We need another fedmsg endpoint which we can use for testing. This will require proper documentation changes too.
The key should be id
instead of compose_id
We now have two non-gating tests for tunirtests. We need to deploy them in production.
In the latest production deployment we found fedfind breaking for the Atomic composes. The upstream has already fixed the issue. We are also carrying a hotfix in the production. We need to carefully test the latest fedfind, and also remove the hotfix in the upcoming bugfix release.
Each task id should be a link.
I would like to request that the [u'msg']
dict contain a key: value
pair that would declare what Fedora Release that particular autocloud task was run against.
Thank you,
-AdamM
Currently we have a situation where autocloud is adding the same image more than once to a compose based job. View this job as an example.
While adding the job for each image, we must check if it already exists in the DB, if not then only add it.
Right now Autocloud sends duplicate compose running status message to fedmsg
We have the SOP missing in the docs, either I have to find it, or write a new one :(
Right now fedimg is a system that listens for the same koji tasks over fedmsg that autocloud does. When it notices that a createImage task is done, it uploads the image to AWS as an AMI (it also runs a silly /bin/true
test at the end, but not much else). When it is done, it publishes its own fedmsg message about its status.
It would be cool if autocloud could listen for not only koji tasks, but also for the fedmsg message that fedimg produces. autocloud could then test the fresh AMIs in EC2 itself. It could take the AMIs, deploy new nodes, and use tunir to login and run tests. autocloud could then display the status of those tests alongside the other image tests in its dashboard. autocloud would then serve as a frontend for fedimg where the websites team and the QA team could go to see what got uploaded and what didn't, what works and what doesn't.
@ralphbean suggested that it'd be better to rename family
field in JobDetails table to variant
.
Right now there are a few configuration that are inside the Autocloud Consumer so we should move that out to the autocloud.cfg
This is a follow-on to issue #19. In addition to just showing these things, it'd be nice to be able to filter by them โ just show me Fedora Atomic Host, just show me Fedora 23, just show me development releases, etc.
In https://github.com/kushaldas/autocloud/blob/develop/autocloud_job.py#L155 copy the file forcefully
In recent autocloud run for Fedora cloud composes, there is no log messages for failed tests. Output file says NO RESULT FILE.:
Example: For autocloud run on compose Fedora-Cloud-26-20180413.0, vagrant-libvirt test has failed. Click on output, test log is not available
Currently autocloud does not test the EC2 AMI images and it would be nice if we did.
A couple of examples of ways to query datagrepper for the AMI information (courtesy of threebean):
https://github.com/fedora-infra/fedimg/blob/develop/bin/list-the-amis.py
https://git.fedorahosted.org/cgit/fedora-web.git/tree/getfedora.org/build/fedimg_vars.py
Thank you,
-AdamM
smooge and nirik reported that there are a lot of long lasting db connections from autocloud.
Currently both the Vagrant box types share the same image_name
of Fedora-Cloud-Atomic-Vagrant
and there's no good way to differentiate without doing heuristic checks on the image_url
field of the fedmsg. I would like to request they have different image_name
fields.
Example libvirt box:
{
"source_name": "datanommer",
"certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUViakNDQTllZ0F3SUJBZ0lDQWgwd0RRWUpL\nb1pJaHZjTkFRRUZCUUF3Z2FBeEN6QUpCZ05WQkFZVEFsVlQKTVFzd0NRWURWUVFJRXdKT1F6RVFN\nQTRHQTFVRUJ4TUhVbUZzWldsbmFERVhNQlVHQTFVRUNoTU9SbVZrYjNKaApJRkJ5YjJwbFkzUXhE\nekFOQmdOVkJBc1RCbVpsWkcxelp6RVBNQTBHQTFVRUF4TUdabVZrYlhObk1ROHdEUVlEClZRUXBF\nd1ptWldSdGMyY3hKakFrQmdrcWhraUc5dzBCQ1FFV0YyRmtiV2x1UUdabFpHOXlZWEJ5YjJwbFkz\nUXUKYjNKbk1CNFhEVEUxTURreU5URTBOVGsxTTFvWERUSTFNRGt5TWpFME5UazFNMW93Z2Z3eEN6\nQUpCZ05WQkFZVApBbFZUTVFzd0NRWURWUVFJRXdKT1F6RVFNQTRHQTFVRUJ4TUhVbUZzWldsbmFE\nRVhNQlVHQTFVRUNoTU9SbVZrCmIzSmhJRkJ5YjJwbFkzUXhEekFOQmdOVkJBc1RCbVpsWkcxelp6\nRTlNRHNHQTFVRUF4TTBZWFYwYjJOc2IzVmsKTFdGMWRHOWpiRzkxWkMxaVlXTnJaVzVrTURFdWNH\naDRNaTVtWldSdmNtRndjbTlxWldOMExtOXlaekU5TURzRwpBMVVFS1JNMFlYVjBiMk5zYjNWa0xX\nRjFkRzlqYkc5MVpDMWlZV05yWlc1a01ERXVjR2g0TWk1bVpXUnZjbUZ3CmNtOXFaV04wTG05eVp6\nRW1NQ1FHQ1NxR1NJYjNEUUVKQVJZWFlXUnRhVzVBWm1Wa2IzSmhjSEp2YW1WamRDNXYKY21jd2da\nOHdEUVlKS29aSWh2Y05BUUVCQlFBRGdZMEFNSUdKQW9HQkFMRERsQW44NE1oOU5zdUt3SUJVMGZG\nOQphVDFRV1ZucVVEWSs1b3dUM05ITDI5U2JZV1RXOU5LUkczNnYrR201QU9ocldQVXFBaXZaQUda\nT0tuTElwM1JFClVWeXpWZEV5ODRmYlFHK1hjTXAwK0NST2d6bmlodmgzNktXMWRPK3pobGdNQ1Ry\nUEFzNk50ZVFmZ1ZMRDNISWQKUGxFMGZNSkZCQkVKNVhWZHR3bkJBZ01CQUFHamdnRlhNSUlCVXpB\nSkJnTlZIUk1FQWpBQU1DMEdDV0NHU0FHRworRUlCRFFRZ0ZoNUZZWE41TFZKVFFTQkhaVzVsY21G\nMFpXUWdRMlZ5ZEdsbWFXTmhkR1V3SFFZRFZSME9CQllFCkZOb2xrL0xrM0c3MEl3L0VxUElPNmRm\nNkRZQzRNSUhWQmdOVkhTTUVnYzB3Z2NxQUZHdEFXdmtTQ0lsWjUxbmwKQmZVQ0hRcE9meFFBb1lH\nbXBJR2pNSUdnTVFzd0NRWURWUVFHRXdKVlV6RUxNQWtHQTFVRUNCTUNUa014RURBTwpCZ05WQkFj\nVEIxSmhiR1ZwWjJneEZ6QVZCZ05WQkFvVERrWmxaRzl5WVNCUWNtOXFaV04wTVE4d0RRWURWUVFM\nCkV3Wm1aV1J0YzJjeER6QU5CZ05WQkFNVEJtWmxaRzF6WnpFUE1BMEdBMVVFS1JNR1ptVmtiWE5u\nTVNZd0pBWUoKS29aSWh2Y05BUWtCRmhkaFpHMXBia0JtWldSdmNtRndjbTlxWldOMExtOXlaNElK\nQU9OUUhrZFBGeDVGTUJNRwpBMVVkSlFRTU1Bb0dDQ3NHQVFVRkJ3TUNNQXNHQTFVZER3UUVBd0lI\nZ0RBTkJna3Foa2lHOXcwQkFRVUZBQU9CCmdRQ003ZFlHNDBrWjRYcm9ERk5wWm44Sm0yZnFPU09F\ndU9BejYwbU5uY1lvK0pjL2wzbCtRMCtPak0yY0NiUDQKZ29RSVBMQmZVcHJvV20yeE9OZnIzUlF2\nMVNJbUE1cGdtUVVOM3pCMjllUThKRW43dmF4ZU83b1VtUE9hUy9lWgpZUXEzVzV6d3N1TmpTNGlS\nMHh2VCtMTCtlYk5wU3lSQjgrZVhRc0YyeE8yTXlBPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0t\nLQo=\n",
"i": 42,
"timestamp": 1444655221.0,
"msg_id": "2015-7ba7d6fd-432f-43cd-8406-a67ff0127fe2",
"topic": "org.fedoraproject.prod.autocloud.image.queued",
"source_version": "0.6.5",
"signature": "Ez1igWMFikAJln0NccVLGchcs0ktsEUG1TPCV4LTnwrYGODX72X/Ok9K6FFZYZApvcUlqxi3OvfL\nvi9B0vNrwkBu83YtvVvUVg0mUZf2v+7Be4Pa1Hv1kT+9e69ewiZOOb7RF/i93LZLFhP4jKPv05wD\n0LbOs+GyHgucSD/wYSg=\n",
"msg": {
"status": "queued",
"job_id": 262,
"buildid": 11414712,
"image_name": "Fedora-Cloud-Atomic-Vagrant",
"image_url": "https://kojipkgs.fedoraproject.org//work/tasks/4712/11414712/Fedora-Cloud-Atomic-Vagrant-rawhide-20151012.x86_64.vagrant-libvirt.box",
"release": "rawhide"
}
}
Example virtualbox box:
{
"source_name": "datanommer",
"certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUViakNDQTllZ0F3SUJBZ0lDQWg0d0RRWUpL\nb1pJaHZjTkFRRUZCUUF3Z2FBeEN6QUpCZ05WQkFZVEFsVlQKTVFzd0NRWURWUVFJRXdKT1F6RVFN\nQTRHQTFVRUJ4TUhVbUZzWldsbmFERVhNQlVHQTFVRUNoTU9SbVZrYjNKaApJRkJ5YjJwbFkzUXhE\nekFOQmdOVkJBc1RCbVpsWkcxelp6RVBNQTBHQTFVRUF4TUdabVZrYlhObk1ROHdEUVlEClZRUXBF\nd1ptWldSdGMyY3hKakFrQmdrcWhraUc5dzBCQ1FFV0YyRmtiV2x1UUdabFpHOXlZWEJ5YjJwbFkz\nUXUKYjNKbk1CNFhEVEUxTURreU5URTBOVGsxT1ZvWERUSTFNRGt5TWpFME5UazFPVm93Z2Z3eEN6\nQUpCZ05WQkFZVApBbFZUTVFzd0NRWURWUVFJRXdKT1F6RVFNQTRHQTFVRUJ4TUhVbUZzWldsbmFE\nRVhNQlVHQTFVRUNoTU9SbVZrCmIzSmhJRkJ5YjJwbFkzUXhEekFOQmdOVkJBc1RCbVpsWkcxelp6\nRTlNRHNHQTFVRUF4TTBZWFYwYjJOc2IzVmsKTFdGMWRHOWpiRzkxWkMxaVlXTnJaVzVrTURJdWNH\naDRNaTVtWldSdmNtRndjbTlxWldOMExtOXlaekU5TURzRwpBMVVFS1JNMFlYVjBiMk5zYjNWa0xX\nRjFkRzlqYkc5MVpDMWlZV05yWlc1a01ESXVjR2g0TWk1bVpXUnZjbUZ3CmNtOXFaV04wTG05eVp6\nRW1NQ1FHQ1NxR1NJYjNEUUVKQVJZWFlXUnRhVzVBWm1Wa2IzSmhjSEp2YW1WamRDNXYKY21jd2da\nOHdEUVlKS29aSWh2Y05BUUVCQlFBRGdZMEFNSUdKQW9HQkFOYnRHYlMrNWZDTEM0SlljcGRja0RC\nTgpSNUpSNmtvUXBVVlBnZ3V5R3JaaC8ya1B6dmRRcWtiQy8waG9zUlJnU3pTcC9ac3BBbkN1T21G\nSnd4czF0aDhFCjNqRTRsbjd3VjBTMUpNb3NOMHVzVmNEczlaaEljM0p2bTU5SkdTTUdKWFlXeHpG\nMjVoQlBYMjJOVVExdVlUaDQKem5KL3B3Z3VaajBjZFZPMC9LMVpBZ01CQUFHamdnRlhNSUlCVXpB\nSkJnTlZIUk1FQWpBQU1DMEdDV0NHU0FHRworRUlCRFFRZ0ZoNUZZWE41TFZKVFFTQkhaVzVsY21G\nMFpXUWdRMlZ5ZEdsbWFXTmhkR1V3SFFZRFZSME9CQllFCkZIcXIrTWx5R2hmVUZkREF5V2xnbG5j\ncFlvWmlNSUhWQmdOVkhTTUVnYzB3Z2NxQUZHdEFXdmtTQ0lsWjUxbmwKQmZVQ0hRcE9meFFBb1lH\nbXBJR2pNSUdnTVFzd0NRWURWUVFHRXdKVlV6RUxNQWtHQTFVRUNCTUNUa014RURBTwpCZ05WQkFj\nVEIxSmhiR1ZwWjJneEZ6QVZCZ05WQkFvVERrWmxaRzl5WVNCUWNtOXFaV04wTVE4d0RRWURWUVFM\nCkV3Wm1aV1J0YzJjeER6QU5CZ05WQkFNVEJtWmxaRzF6WnpFUE1BMEdBMVVFS1JNR1ptVmtiWE5u\nTVNZd0pBWUoKS29aSWh2Y05BUWtCRmhkaFpHMXBia0JtWldSdmNtRndjbTlxWldOMExtOXlaNElK\nQU9OUUhrZFBGeDVGTUJNRwpBMVVkSlFRTU1Bb0dDQ3NHQVFVRkJ3TUNNQXNHQTFVZER3UUVBd0lI\nZ0RBTkJna3Foa2lHOXcwQkFRVUZBQU9CCmdRQXI4ODF3UUVyT2ozWUFRNWQwMGx3aHJtV0dzclM3\nVGJoZ2xEa01JN3l5VDdFdE95dk54VC9lQlZkZEF0WU4KTWR4enBQK3B2TitaRkZtTmw4YklyVlJ4\ncjJsYUxWWDNhakJxVDcrVWEyMldRVFJnNFlLZGEzT0VsaEd2VmRiawpVU3FKS3ppbktLOGJneDdC\ndVZXY1hseDVsbUg5ZWF3RDRxYVVFdTE2Y2JCN25RPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0t\nLQo=\n",
"i": 18,
"timestamp": 1444655225.0,
"msg_id": "2015-3430b083-8ae1-4745-b743-be6d4f632d36",
"topic": "org.fedoraproject.prod.autocloud.image.queued",
"source_version": "0.6.5",
"signature": "DsrwkgC724N7PI2nwIYWS/gm9cHd0bBDGPR9efzBHjp8Zqy5kaEAMGTkbOsU9cxt/I7D6cPORNhj\nyOEoplra8InICJvS9qfS0r6ygN9IQJWaplKKPoTNhWF7ctf0E/FvariaVLUxobZ9pAfYcYkqY1pW\n+rI1d53/ynmbwyY8y7o=\n",
"msg": {
"status": "queued",
"job_id": 261,
"buildid": 11414712,
"image_name": "Fedora-Cloud-Atomic-Vagrant",
"image_url": "https://kojipkgs.fedoraproject.org//work/tasks/4712/11414712/Fedora-Cloud-Atomic-Vagrant-rawhide-20151012.x86_64.vagrant-virtualbox.box",
"release": "rawhide"
}
}
We need to check for the new names of the Atomic images. That is : Fedora-Atomic
It used to be Fedora-Cloud-Atomic
This cause dropping of Atomic images for F24 onwards.
We need to investigate to have a better way to get the download image URL(s) from koji buildids/fedmsg.
Remove the "tasks" from the URL
Right now, https://apps.fedoraproject.org/autocloud/jobs/ shows IDs and success, but it'd be nice to know if the image is Atomic or Base, which architecture, and which Fedora release it's built on.
It might also be nice to have pre-release images and post-release images highlighted differently (that is, if it's F23 testing branch, or F22 + updates), and Rawhide too, for that matter.
Remove all jenkinsapi related code and config from codebase.
Add the following dependencies in web subpackage
In backend
In common
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.