name: build on: push: branches: - master - stable tags: - "v*" pull_request: jobs: prepare-release: if: startsWith(github.ref, 'refs/tags/v') runs-on: ubuntu-latest steps: - name: Clone project uses: actions/checkout@v2 - name: Build changelog id: build_changelog uses: mikepenz/release-changelog-builder-action@v1 with: configuration: .github/changelog_conf.json failOnError: true ignorePreReleases: true commitMode: true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Create release uses: softprops/action-gh-release@v1 with: body: ${{ steps.build_changelog.outputs.changelog }} prerelease: true files: | LICENSE fail_on_unmatched_files: true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} build: name: build-${{ matrix.os }} if: always() needs: prepare-release runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: include: - os: ubuntu-20.04 cache_path: ~/.stack asset_name: simplex-chat-ubuntu-20_04-x86-64 - os: ubuntu-18.04 cache_path: ~/.stack asset_name: simplex-chat-ubuntu-18_04-x86-64 - os: macos-latest cache_path: ~/.stack asset_name: simplex-chat-macos-x86-64 - os: windows-latest cache_path: C:/sr asset_name: simplex-chat-windows-x86-64 steps: - name: Clone project uses: actions/checkout@v2 - name: Setup Stack uses: haskell/actions/setup@v1 with: ghc-version: '8.10.7' enable-stack: true stack-version: 'latest' - name: Cache dependencies uses: actions/cache@v2 with: path: ${{ matrix.cache_path }} key: ${{ matrix.os }}-${{ hashFiles('stack.yaml') }} # / Unix - name: Unix build id: unix_build if: matrix.os != 'windows-latest' shell: bash run: | stack build --test echo "::set-output name=local_install_root::$(stack path --local-install-root)" - name: Unix upload binary to release if: startsWith(github.ref, 'refs/tags/v') && matrix.os != 'windows-latest' uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: ${{ steps.unix_build.outputs.local_install_root }}/bin/simplex-chat asset_name: ${{ matrix.asset_name }} tag: ${{ github.ref }} # Unix / # / Windows # * In powershell multiline commands do not fail if individual commands fail - https://github.community/t/multiline-commands-on-windows-do-not-fail-if-individual-commands-fail/16753 # * And GitHub Actions does not support parameterizing shell in a matrix job - https://github.community/t/using-matrix-to-specify-shell-is-it-possible/17065 # * So we're running a separate set of actions for Windows build # TODO run tests on Windows - name: Windows build id: windows_build if: matrix.os == 'windows-latest' shell: cmd run: | stack build stack path --local-install-root > tmp_file set /p local_install_root= < tmp_file echo ::set-output name=local_install_root::%local_install_root% - name: Windows upload binary to release if: startsWith(github.ref, 'refs/tags/v') && matrix.os == 'windows-latest' uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: ${{ steps.windows_build.outputs.local_install_root }}\bin\simplex-chat.exe asset_name: ${{ matrix.asset_name }} tag: ${{ github.ref }} # Windows /