name: Build release packages on: push: branches-ignore: - 'gerrit/*' tags: - 'v*' jobs: build-linux: name: ${{ matrix.config.name }} runs-on: ubuntu-latest timeout-minutes: 60 strategy: fail-fast: false matrix: config: - { name: 'Build on Linux (gcc)', options: 'qbs.installPrefix:"" modules.cpp.compilerWrapper:ccache modules.qbsbuildconfig.enableAddressSanitizer:false project.withTests:false modules.qbsbuildconfig.enableUnitTests:false modules.qbsbuildconfig.enableBundledQt:true products.qbs_archive.targetName:qbs-linux-${{ github.run_id }}', script: './scripts/build-qbs-with-qbs.sh', cacheid: 'gcc-release', } env: BUILD_OPTIONS: ${{ matrix.config.options }} WITH_TESTS: 0 steps: - uses: actions/checkout@v1 - name: Create .ccache dir run: mkdir -p ~/.ccache - name: test run: echo ${{ github.ref }} - name: prepare timestamp id: get-timestamp run: echo ::set-output name=timestamp::$(date -u +"%Y-%m-%dT%H:%M:%SZ") - name: ccache cache files uses: actions/cache@v2 with: path: ~/.ccache key: ${{ runner.os }}-${{ matrix.config.cacheid }}-ccache-${{ steps.get-timestamp.outputs.timestamp }} restore-keys: ${{ runner.os }}-${{ matrix.config.cacheid }}-ccache- - name: Pull the Focal Image run: docker-compose pull focal - name: Print ccache stats run: docker-compose run focal ccache -s - name: Build Qbs run: docker-compose run focal ${{ matrix.config.script }} - name: Print ccache stats run: docker-compose run focal ccache -s - name: Get archive name id: get-archive-name run: echo ::set-output name=archive-name::$(git describe) - name: Upload artifacts uses: 'actions/upload-artifact@v2' with: name: qbs-linux-${{ github.run_id }}.tar.gz path: release/qbs-linux-${{ github.run_id }}.tar.gz build-macos: name: Build on macOS runs-on: macos-11 timeout-minutes: 60 env: BUILD_OPTIONS: | qbs.installPrefix:"" modules.cpp.compilerWrapper:ccache project.withTests:false modules.qbsbuildconfig.enableUnitTests:false modules.qbsbuildconfig.enableAddressSanitizer:false modules.qbsbuildconfig.enableBundledQt:true products.qbs_archive.targetName:qbs-macos-${{ github.run_id }} WITH_TESTS: 0 steps: - uses: actions/checkout@v1 - name: Create .ccache dir run: mkdir -p ~/.ccache - name: prepare timestamp id: get-timestamp run: echo ::set-output name=timestamp::$(date -u +"%Y-%m-%dT%H:%M:%SZ") - name: ccache cache files uses: actions/cache@v2 with: path: ~/.ccache key: ${{ runner.os }}-release-ccache-${{ steps.get-timestamp.outputs.timestamp }} restore-keys: ${{ runner.os }}-release-ccache- - name: Install required packages run: | brew install ccache p7zip python3 -m pip install --user beautifulsoup4 lxml - name: Install Qt uses: ./.github/actions/download-qt with: toolchain: clang_64 - name: Install Qt Creator uses: ./.github/actions/download-qtc - name: Setup Qbs run: | qbs setup-toolchains --detect qbs setup-qt --detect qbs config profiles.qt.baseProfile xcode_11_7-macosx-x86_64 qbs config defaultProfile qt qbs config --list - name: Print ccache stats run: ccache -s - name: Build Qbs run: scripts/build-qbs-with-qbs.sh - name: Print ccache stats run: ccache -s - name: Upload artifacts uses: 'actions/upload-artifact@v2' with: name: qbs-macos-${{ github.run_id }}.tar.gz path: release/qbs-macos-${{ github.run_id }}.tar.gz build-windows-with-docker: name: Build on Windows (Docker) runs-on: windows-2019 timeout-minutes: 60 env: WITH_TESTS: 0 QT_ASSUME_STDERR_HAS_CONSOLE: 1 CLCACHE_DIR: C:\.ccache steps: - uses: actions/checkout@v1 - name: Create .ccache dir run: mkdir -p ~/.ccache shell: bash - name: prepare timestamp id: get-timestamp run: echo ::set-output name=timestamp::$(date -u +"%Y-%m-%dT%H:%M:%SZ") shell: bash - name: clcache cache files uses: actions/cache@v2 with: path: ~/.ccache key: ${{ runner.os }}-release-msvc-docker-clcache-${{ steps.get-timestamp.outputs.timestamp }} restore-keys: ${{ runner.os }}-release-msvc-docker-clcache- - name: Pull the Windows Image run: docker-compose pull windows - name: Print clcache stats run: docker-compose run --rm windows clcache -s - name: Build Qbs run: > docker-compose run --rm windows qbs build -p dist qbs.buildVariant:release modules.cpp.compilerWrapper:clcache project.withTests:false modules.qbsbuildconfig.enableBundledQt:true modules.qbsbuildconfig.enableUnitTests:false modules.cpp.treatWarningsAsErrors:true project.withDocumentation:true config:release profile:qt64 - name: Print clcache stats run: docker-compose run --rm windows clcache -s - name: Get archive name id: get-archive-name run: echo ::set-output name=archive-name::$(git describe) shell: bash - name: Upload artifacts uses: 'actions/upload-artifact@v2' with: name: qbs-windows-${{ github.run_id }} path: | release/qbs.*.nupkg release/qbs-windows-*.zip create-archives: name: Create Archives runs-on: ubuntu-latest needs: [build-linux, build-windows-with-docker] steps: - uses: actions/checkout@v1 with: submodules: true - name: Get version name id: get-version-name run: echo ::set-output name=version-name::$(cat VERSION) - name: Create directories run: | mkdir release mkdir tmp - name: Copy sources run: rsync -av --exclude='.git/' --exclude='tmp/' . ./tmp/qbs-src-${{ steps.get-version-name.outputs.version-name }} - name: Zip Archive run: | cd tmp/ zip -r ../release/qbs-src-${{ steps.get-version-name.outputs.version-name }}.zip qbs-src-${{ steps.get-version-name.outputs.version-name }} - name: Tarball Archive run: | cd tmp/ tar czf ../release/qbs-src-${{ steps.get-version-name.outputs.version-name }}.tar.gz qbs-src-${{ steps.get-version-name.outputs.version-name }} - name: Download Linux artifacts uses: actions/download-artifact@v1 with: name: qbs-linux-${{ github.run_id }}.tar.gz path: ./tmp - name: Repack Linux artifact run: | mkdir -p tmp/qbs-linux-x86_64-${{ steps.get-version-name.outputs.version-name }} tar xzf ./tmp/qbs-linux-${{ github.run_id }}.tar.gz -C tmp/qbs-linux-x86_64-${{ steps.get-version-name.outputs.version-name }} cd tmp/ tar czf ../release/qbs-linux-x86_64-${{ steps.get-version-name.outputs.version-name }}.tar.gz qbs-linux-x86_64-${{ steps.get-version-name.outputs.version-name }} - name: Download Windows artifacts uses: actions/download-artifact@v1 with: name: qbs-windows-${{ github.run_id }} path: ./tmp/release - name: Copy Windows artifacts run: | cp ./tmp/release/qbs.*.nupkg ./release cp ./tmp/release/qbs-windows-x86_64-*.zip ./release - name: Copy changelog run: cp changelogs/changes-${{ steps.get-version-name.outputs.version-name }}.md release || echo "changelog not found" - name: Generate checksums run: | cd release/ find . -type f -printf '%f\n' | grep -v .txt | xargs md5sum > md5sums.txt find . -type f -printf '%f\n' | grep -v .txt | xargs sha256sum > sha256sums.txt - name: Get archive name id: get-archive-name run: echo ::set-output name=archive-name::$(git describe) - name: Upload artifacts uses: 'actions/upload-artifact@v2' with: name: qbs-release-${{ steps.get-archive-name.outputs.archive-name }} path: | release/qbs-src-*.zip release/qbs-src-*.tar.gz release/qbs-linux-*.tar.gz release/qbs.*.nupkg release/qbs-windows-x86_64-*.zip release/changes-*.md release/md5sums.txt release/sha256sums.txt