Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Thibault Saunier
gst-ci
Commits
a49607b5
Commit
a49607b5
authored
Aug 07, 2018
by
Thibault Saunier
🌵
Browse files
gitlab: Add a script to build manifest from a gitlab CI context
parent
f4b08721
Changes
1
Hide whitespace changes
Inline
Side-by-side
gitlab/build_manifest.py
0 → 100755
View file @
a49607b5
#!/usr/bin/env python3
import
os
import
requests
import
sys
GSTREAMER_MODULES
=
[
'gst-build'
,
'gstreamer'
,
'gst-plugins-base'
,
'gst-plugins-good'
,
'gst-plugins-bad'
,
'gst-plugins-ugly'
,
'gst-libav'
,
'gst-devtools'
,
'gst-docs'
,
'gst-editing-services'
,
'gst-omx'
,
'gst-python'
,
'gst-rtsp-server'
]
MANIFEST_TEMPLATE
=
"""<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote fetch="%s" name="user"/>
<remote fetch="https://gitlab.freedesktop.org/gstreamer/" name="origin"/>
%s
</manifest>"""
from
pprint
import
pprint
def
request
(
path
):
gitlab_header
=
{
'JOB_TOKEN'
:
os
.
environ
[
"CI_JOB_TOKEN"
]}
url
=
'https://gitlab.freedesktop.org/api/v4/'
+
path
# print("requests.get('%s', headers=gitlab_header)-> %s" % (url,
# pprint(vars(requests.get(url, headers=gitlab_header)))))
return
requests
.
get
(
url
,
headers
=
gitlab_header
).
json
()
def
find_repository_sha
(
module
,
branchname
):
projects
=
request
(
'projects?owned=true&search='
+
module
)
+
request
(
'groups/gstreamer/projects?search='
+
module
)
for
project
in
projects
:
if
project
[
'name'
]
!=
module
:
continue
if
'namespace'
not
in
project
:
print
(
"No 'namespace' in: %s - ignoring?"
%
project
,
file
=
sys
.
stderr
)
continue
if
project
[
'namespace'
][
'name'
]
in
useful_namespaces
:
if
project
[
'namespace'
][
'name'
]
==
user_namespace
:
# If we have a branch with same name, use it.
for
branch
in
request
(
'projects/%s/repository/branches'
%
project
[
'id'
]):
if
branch
[
'name'
]
==
branchname
:
return
'user'
,
branch
[
'commit'
][
'id'
],
"%s/%s"
%
(
project
[
'namespace'
][
'name'
],
branchname
)
else
:
for
current_branchname
in
[
branchname
,
"master"
]:
branches
=
request
(
'projects/%s/repository/branches?search=%s'
%
(
project
[
'id'
],
current_branchname
))
for
branch
in
branches
:
if
branch
[
'name'
]
==
current_branchname
:
return
'origin'
,
branch
[
'commit'
][
'id'
],
'origin/master'
assert
(
"No branch found, not even master?! %s"
%
branches
is
None
)
pprint
(
projects
)
return
'origin'
,
'master'
,
'origin/master'
if
__name__
==
"__main__"
:
user_namespace
=
os
.
environ
[
'CI_PROJECT_NAMESPACE'
]
project_name
=
os
.
environ
[
'CI_PROJECT_NAME'
]
branchname
=
os
.
environ
[
'CI_COMMIT_REF_NAME'
]
useful_namespaces
=
[
'gstreamer'
]
if
branchname
!=
'master'
:
useful_namespaces
.
append
(
user_namespace
)
# Shouldn't be needed.
remote
=
"git://anongit.freedesktop.org/gstreamer/"
projects
=
''
project_template
=
' <project name="%(module)s" remote="%(remote)s" revision="%(revision)s" refname="%(refname)s/>
\n
'
user_remote
=
os
.
path
.
dirname
(
os
.
environ
[
'CI_PROJECT_URL'
])
for
module
in
GSTREAMER_MODULES
:
print
(
"Checking %s:"
%
module
,
end
=
' '
)
remote
=
"origin"
revision
=
None
if
module
==
project_name
:
revision
=
os
.
environ
[
'CI_COMMIT_SHA'
]
remote
=
"user"
refname
=
"%s/%s"
%
(
user_namespace
,
branchname
)
else
:
remote
,
revision
,
refname
=
find_repository_sha
(
module
,
branchname
)
print
(
refname
)
if
not
revision
:
revision
=
'master'
projects
+=
project_template
%
{
'module'
:
module
,
'refname'
:
refname
,
'remote'
:
remote
,
'revision'
:
revision
}
with
open
(
'manifest.xml'
,
mode
=
'w'
)
as
manifest
:
print
(
MANIFEST_TEMPLATE
%
(
user_remote
,
projects
),
file
=
manifest
)
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment