# GitHub actions workflow which builds the release artifacts. name: Build release artifacts on: # we build on PRs and develop to (hopefully) get early warning # of things breaking (but only build one set of debs) pull_request: push: branches: ["develop", "release-*"] # we do the full build on tags. tags: ["v*"] concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true permissions: contents: write jobs: get-distros: name: "Calculate list of debian distros" runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-python@v2 - id: set-distros run: | # if we're running from a tag, get the full list of distros; otherwise just use debian:sid dists='["debian:sid"]' if [[ $GITHUB_REF == refs/tags/* ]]; then dists=$(scripts-dev/build_debian_packages.py --show-dists-json) fi echo "::set-output name=distros::$dists" # 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: - name: Checkout uses: actions/checkout@v2 with: path: src - name: Set up Docker Buildx id: buildx uses: docker/setup-buildx-action@v1 with: install: true - name: Set up docker layer caching uses: actions/cache@v2 with: path: /tmp/.buildx-cache key: ${{ runner.os }}-buildx-${{ github.sha }} restore-keys: | ${{ runner.os }}-buildx- - name: Set up python uses: actions/setup-python@v2 - name: Build the packages # see https://github.com/docker/build-push-action/issues/252 # for the cache magic here run: | ./src/scripts-dev/build_debian_packages.py \ --docker-build-arg=--cache-from=type=local,src=/tmp/.buildx-cache \ --docker-build-arg=--cache-to=type=local,mode=max,dest=/tmp/.buildx-cache-new \ --docker-build-arg=--progress=plain \ --docker-build-arg=--load \ "${{ matrix.distro }}" rm -rf /tmp/.buildx-cache mv /tmp/.buildx-cache-new /tmp/.buildx-cache - name: Upload debs as artifacts uses: actions/upload-artifact@v2 with: name: debs path: debs/* build-sdist: name: "Build pypi distribution files" uses: "matrix-org/backend-meta/.github/workflows/packaging.yml@v1" # if it's a tag, create a release and attach the artifacts to it attach-assets: name: "Attach assets to release" if: ${{ !failure() && !cancelled() && startsWith(github.ref, 'refs/tags/') }} needs: - build-debs - build-sdist runs-on: ubuntu-latest steps: - name: Download all workflow run artifacts uses: actions/download-artifact@v2 - name: Build a tarball for the debs run: tar -cvJf debs.tar.xz debs - name: Attach to release uses: softprops/action-gh-release@a929a66f232c1b11af63782948aa2210f981808a # PR#109 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: files: | python-dist/* debs.tar.xz # if it's not already published, keep the release as a draft. draft: true # mark it as a prerelease if the tag contains 'rc'. prerelease: ${{ contains(github.ref, 'rc') }}