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
gajim
python-nbxmpp
Commits
7c1ec434
Commit
7c1ec434
authored
May 23, 2022
by
Philipp Hörist
Browse files
ci: Add debian build script
parent
325d4d2d
Changes
1
Hide whitespace changes
Inline
Side-by-side
.ci/debian_build.py
0 → 100644
View file @
7c1ec434
#!/usr/bin/env python3
from
__future__
import
annotations
import
argparse
import
dataclasses
import
logging
import
shutil
import
subprocess
from
datetime
import
datetime
from
datetime
import
timezone
from
pathlib
import
Path
LOG_FORMAT
=
'%(asctime)s %(levelname)s %(message)s'
logging
.
basicConfig
(
format
=
LOG_FORMAT
,
level
=
logging
.
DEBUG
)
log
=
logging
.
getLogger
()
ROOT_DIR
=
Path
(
__file__
).
resolve
().
parent
.
parent
BUILD_DIR
=
ROOT_DIR
/
'debian_build'
DATE
=
datetime
.
now
().
strftime
(
'%Y%m%d'
)
DATE_TIME
=
datetime
.
now
(
tz
=
timezone
.
utc
).
strftime
(
'%a, %d %b %Y %T %z'
)
@
dataclasses
.
dataclass
class
ReleaseContext
:
app
:
str
pkg_name
:
str
rev
:
str
release_name
:
str
release_dir
:
Path
tarball
:
Path
@
classmethod
def
from_tarball
(
cls
,
path
:
str
,
prefix
:
str
,
rev
:
str
)
->
ReleaseContext
:
tarball
=
Path
(
path
)
app
=
tarball
.
name
.
split
(
'-'
,
maxsplit
=
1
)[
0
]
pkg_name
=
f
'
{
prefix
}{
app
}
-nightly'
release_name
=
f
'
{
pkg_name
}
_
{
DATE
}
'
release_dir
=
BUILD_DIR
/
release_name
return
cls
(
app
=
app
,
pkg_name
=
pkg_name
,
rev
=
rev
,
release_name
=
release_name
,
release_dir
=
release_dir
,
tarball
=
tarball
)
def
clean_build_dir
()
->
None
:
log
.
info
(
'Cleanup build directory'
)
if
BUILD_DIR
.
exists
():
shutil
.
rmtree
(
BUILD_DIR
)
BUILD_DIR
.
mkdir
()
def
prepare_package_dir
(
context
:
ReleaseContext
)
->
None
:
log
.
info
(
'Extract tarball'
)
tarball
=
Path
(
shutil
.
copy
(
context
.
tarball
,
BUILD_DIR
))
tarball
=
tarball
.
rename
(
BUILD_DIR
/
f
'
{
context
.
release_name
}
.orig.tar.gz'
)
shutil
.
unpack_archive
(
tarball
,
BUILD_DIR
)
log
.
info
(
'Rename dir to: %s'
,
context
.
release_name
)
folder
=
list
(
BUILD_DIR
.
glob
(
f
'
{
context
.
app
}
-?.?.?'
))[
0
]
folder
=
folder
.
rename
(
context
.
release_dir
)
log
.
info
(
'Copy debian folder into release directory'
)
shutil
.
copytree
(
ROOT_DIR
/
'debian'
,
context
.
release_dir
/
'debian'
)
def
prepare_changelog
(
context
:
ReleaseContext
)
->
None
:
log
.
info
(
'Prepare Changelog'
)
changelog
=
context
.
release_dir
/
'debian'
/
'changelog'
content
=
changelog
.
read_text
()
content
=
content
.
replace
(
'{DATE}'
,
f
'
{
DATE
}
-
{
context
.
rev
}
'
)
content
=
content
.
replace
(
'{DATE_TIME}'
,
DATE_TIME
)
changelog
.
write_text
(
content
)
def
build
(
context
:
ReleaseContext
)
->
None
:
log
.
info
(
'Start package build'
)
subprocess
.
run
(
[
'dpkg-buildpackage'
,
'-rfakeroot'
,
'--no-sign'
],
cwd
=
context
.
release_dir
,
check
=
True
)
if
__name__
==
'__main__'
:
parser
=
argparse
.
ArgumentParser
(
description
=
'Build debian package'
)
parser
.
add_argument
(
'tarball'
,
help
=
'Path to tarball e.g. app.tar.gz'
)
parser
.
add_argument
(
'rev'
,
help
=
'The package revision e.g. 1'
)
parser
.
add_argument
(
'--pkgprefix'
,
default
=
''
,
required
=
False
,
help
=
'Prefix for the package name e.g. python3-'
)
args
=
parser
.
parse_args
()
context
=
ReleaseContext
.
from_tarball
(
args
.
tarball
,
args
.
pkgprefix
,
args
.
rev
)
clean_build_dir
()
prepare_package_dir
(
context
)
prepare_changelog
(
context
)
build
(
context
)
Write
Preview
Markdown
is supported
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