diff --git a/.github/workflows/debs.yml b/.github/workflows/debs.yml
new file mode 100644
index 0000000000..e03a419426
--- /dev/null
+++ b/.github/workflows/debs.yml
@@ -0,0 +1,44 @@
+# GitHub actions workflow which builds the debian packages.
+
+name: Debs
+
+on:
+ push:
+ branches: ["develop", "release-*"]
+
+permissions:
+ contents: read
+
+jobs:
+ # first get the list of distros to build for.
+ get-distros:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions/setup-python@v2
+ - id: set-distros
+ run: |
+ echo "::set-output name=distros::$(scripts-dev/build_debian_packages --show-dists-json)"
+ # map the step outputs to job outputs
+ outputs:
+ distros: ${{ steps.set-distros.outputs.distros }}
+
+ # now build the packages with a matrix build.
+ build-debs:
+ needs: get-distros
+ name: "Build .deb packages"
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ distro: ${{ fromJson(needs.get-distros.outputs.distros) }}
+
+ steps:
+ - uses: actions/checkout@v2
+ with:
+ path: src
+ - uses: actions/setup-python@v2
+ - run: ./src/scripts-dev/build_debian_packages "${{ matrix.distro }}"
+ - uses: actions/upload-artifact@v2
+ with:
+ name: packages
+ path: debs/*
diff --git a/changelog.d/10247.misc b/changelog.d/10247.misc
new file mode 100644
index 0000000000..5824907bca
--- /dev/null
+++ b/changelog.d/10247.misc
@@ -0,0 +1 @@
+Build the Debian packages in CI.
diff --git a/scripts-dev/build_debian_packages b/scripts-dev/build_debian_packages
index 546724f89f..e25c5bb265 100755
--- a/scripts-dev/build_debian_packages
+++ b/scripts-dev/build_debian_packages
@@ -10,6 +10,7 @@
# can be passed on the commandline for debugging.
import argparse
+import json
import os
import signal
import subprocess
@@ -34,6 +35,8 @@ By default, builds for all known distributions, but a list of distributions
can be passed on the commandline for debugging.
"""
+projdir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
+
class Builder(object):
def __init__(self, redirect_stdout=False):
@@ -57,9 +60,6 @@ class Builder(object):
raise
def _inner_build(self, dist, skip_tests=False):
- projdir = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
- os.chdir(projdir)
-
tag = dist.split(":", 1)[1]
# Make the dir where the debs will live.
@@ -93,6 +93,7 @@ class Builder(object):
],
stdout=stdout,
stderr=subprocess.STDOUT,
+ cwd=projdir,
)
container_name = "synapse_build_" + tag
@@ -180,10 +181,18 @@ if __name__ == "__main__":
help="skip running tests after building",
)
parser.add_argument(
+ "--show-dists-json",
+ action="store_true",
+ help="instead of building the packages, just list the dists to build for, as a json array",
+ )
+ parser.add_argument(
"dist",
nargs="*",
default=DISTS,
help="a list of distributions to build for. Default: %(default)s",
)
args = parser.parse_args()
- run_builds(dists=args.dist, jobs=args.jobs, skip_tests=args.no_check)
+ if args.show_dists_json:
+ print(json.dumps(DISTS))
+ else:
+ run_builds(dists=args.dist, jobs=args.jobs, skip_tests=args.no_check)
|