name: Version Release on: push: tags: - 'v*' permissions: contents: write env: RELEASE_DIR: build-release jobs: create-release: runs-on: ubuntu-latest steps: - name: Create Release uses: ncipollo/release-action@v1 with: allowUpdates: true omitBody: true prerelease: true draft: true token: ${{ secrets.GITHUB_TOKEN }} build-qemu: runs-on: ubuntu-latest name: Build aarch64 on ubuntu20.04 needs: create-release steps: - uses: actions/checkout@v4 with: submodules: true - uses: uraimo/run-on-arch-action@v2 name: Run commands id: runcmd with: arch: aarch64 distro: ubuntu20.04 githubToken: ${{ github.token }} # Create an artifacts directory setup: | mkdir -p "${PWD}/artifacts" # Mount the artifacts directory as /artifacts in the container dockerRunArgs: | --volume "${{ github.workspace }}:/src" # The shell to run commands with in the container shell: /bin/bash install: | export DEBIAN_FRONTEND=noninteractive apt update && apt install -q -y autoconf-archive cmake curl git libssl-dev \ libunwind-dev ninja-build libtool gcc-9 g++-9 libboost-context-dev \ zip libzstd-dev debhelper moreutils bison zlib1g-dev update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 40 \ --slave /usr/bin/g++ g++ /usr/bin/g++-9 run: | # Work around https://github.com/actions/checkout/issues/766 git config --global --add safe.directory /src cd /src git describe --always --tags ${{ github.sha }} if [ -d ${{ env.RELEASE_DIR }} ]; then chown -R root ${{ env.RELEASE_DIR }} ls -l ./${{ env.RELEASE_DIR }} for i in `ls -d ./${{ env.RELEASE_DIR }}/_deps/*-src`; do git config --global --add safe.directory $(realpath $i) done fi ./tools/release.sh ./tools/packaging/generate_debian_package.sh ${{ env.RELEASE_DIR }}/dragonfly-aarch64 mv dragonfly_*.deb ${{ env.RELEASE_DIR }}/ - name: Show the artifact # Items placed in /src/${{ env.RELEASE_DIR }} in the container will be in # ${PWD}/${{ env.RELEASE_DIR }} on the host. run: | echo finished ls -al - name: Upload uses: actions/upload-artifact@v4 with: name: dragonfly-aarch64 path: | ${{ env.RELEASE_DIR }}/dragonfly-*tar.gz ${{ env.RELEASE_DIR }}/dragonfly_*.deb build-native: runs-on: ubuntu-latest needs: create-release strategy: matrix: include: # Build with these flags - name: debian container: ubuntu-dev:20 - name: rpm container: fedora:30 container: image: ghcr.io/romange/${{ matrix.container }} options: --security-opt seccomp=unconfined --sysctl "net.ipv6.conf.all.disable_ipv6=0" steps: - uses: actions/checkout@v4 with: submodules: true - name: Configure run: | if [ -f /etc/redhat-release ]; then dnf install -y rpm-build libstdc++-static fi - name: Build artifacts timeout-minutes: 25 run: | # Work around https://github.com/actions/checkout/issues/766 git config --global --add safe.directory "$GITHUB_WORKSPACE" git describe --always --tags ${{ github.sha }} ./tools/release.sh # once the build is over, we want to generate a Debian package if [ -f /etc/debian_version ]; then ./tools/packaging/generate_debian_package.sh ${{ env.RELEASE_DIR }}/dragonfly-x86_64 else echo "Creating package for ${{github.ref_name}}" ./tools/packaging/rpm/build_rpm.sh ${{ env.RELEASE_DIR }}/dragonfly-x86_64.tar.gz ${{github.ref_name}} fi - name: Run regression tests # Fedora 30 has older python packages, so this fails during requirements installation. if : matrix.container != 'fedora:30' uses: ./.github/actions/regression-tests with: dfly-executable: dragonfly-x86_64 gspace-secret: ${{ secrets.GSPACES_BOT_DF_BUILD }} build-folder-name: ${{ env.RELEASE_DIR }} - name: Save artifacts run: | # place all artifacts at the same location mkdir -p results-artifacts if [ -f /etc/debian_version ]; then mv ${{ env.RELEASE_DIR }}/dragonfly-*tar.gz results-artifacts mv dragonfly_*.deb results-artifacts else ls -l *.rpm mv ./*.rpm ./results-artifacts/ fi - name: Upload uses: actions/upload-artifact@v4 with: name: dragonfly-amd64-${{ matrix.name }} path: results-artifacts/* publish_release: runs-on: ubuntu-latest needs: [build-native, build-qemu] steps: - uses: actions/download-artifact@v4 name: Download files with: path: artifacts - name: See all the artifacts run: | ls -lR artifacts/ - uses: ncipollo/release-action@v1 with: artifacts: "artifacts/dragonfly-*/*" allowUpdates: true draft: true prerelease: true omitNameDuringUpdate: true token: ${{ secrets.GITHUB_TOKEN }}