Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

build debs in GHA #10247

Merged
merged 2 commits into from
Jul 12, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions .github/workflows/debs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# GitHub actions workflow which builds the debian packages.

name: Debs

on:
push:
Copy link
Contributor

@babolivier babolivier Jun 25, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we want to run this on pull requests as well? I'm sometimes quick to dismiss a ❌ on a branch because it happens sometimes due to flaky sytests and I don't necessarily bother looking further (because I assume everything that's been PR'd has been ✔️'d on the CI), but I think personally I'd pay more attention if the failure happens on a PR. Or maybe the concern is that it would take too long to run to be valuable to have on a PR?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah, I don't really want to tie up 7 GHA workers for 10-12 minutes every time someone pushes to a PR branch. #8555 suggested an approach of building for oldest and newest supported releases, which might make sense, but I'd rather have that as a separate PR.

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/*
1 change: 1 addition & 0 deletions changelog.d/10247.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Build the Debian packages in CI.
17 changes: 13 additions & 4 deletions scripts-dev/build_debian_packages
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
# can be passed on the commandline for debugging.

import argparse
import json
import os
import signal
import subprocess
Expand All @@ -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):
Expand All @@ -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.
Expand Down Expand Up @@ -93,6 +93,7 @@ class Builder(object):
],
stdout=stdout,
stderr=subprocess.STDOUT,
cwd=projdir,
)

container_name = "synapse_build_" + tag
Expand Down Expand Up @@ -179,11 +180,19 @@ if __name__ == "__main__":
action="store_true",
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)