diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..ad62efb6 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,68 @@ +name: Build +on: + workflow_call: +jobs: + build: + strategy: + matrix: + include: + - name : Windows x64 + os: windows-2019 + runtime: win-x64 + - name : Windows ARM64 + os: windows-2019 + runtime: win-arm64 + - name : macOS (Intel) + os: macos-13 + runtime: osx-x64 + - name : macOS (Apple Silicon) + os: macos-latest + runtime: osx-arm64 + - name : Linux + os: ubuntu-20.04 + runtime: linux-x64 + - name : Linux (arm64) + os: ubuntu-20.04 + runtime: linux-arm64 + name: Build ${{ matrix.name }} + runs-on: ${{ matrix.os }} + steps: + - name: Checkout sources + uses: actions/checkout@v4 + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 8.0.x + - name: Configure arm64 packages + if: ${{ matrix.runtime == 'linux-arm64' }} + run: | + sudo dpkg --add-architecture arm64 + echo 'deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ focal main restricted + deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ focal-updates main restricted + deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ focal-backports main restricted' \ + | sudo tee /etc/apt/sources.list.d/arm64.list + sudo sed -i -e 's/^deb http/deb [arch=amd64] http/g' /etc/apt/sources.list + sudo sed -i -e 's/^deb mirror/deb [arch=amd64] mirror/g' /etc/apt/sources.list + - name: Install cross-compiling dependencies + if: ${{ matrix.runtime == 'linux-arm64' }} + run: | + sudo apt-get update + sudo apt-get install clang llvm gcc-aarch64-linux-gnu zlib1g-dev:arm64 + - name: Build + run: dotnet build -c Release + - name: Publish + run: dotnet publish src/SourceGit.csproj -c Release -o publish -r ${{ matrix.runtime }} + - name: Rename executable file + if: ${{ startsWith(matrix.runtime, 'linux-') }} + run: mv publish/SourceGit publish/sourcegit + - name: Tar artifact + if: ${{ startsWith(matrix.runtime, 'linux-') || startsWith(matrix.runtime, 'osx-') }} + run: | + tar -cvf "sourcegit.${{ matrix.runtime }}.tar" -C publish . + rm -r publish/* + mv "sourcegit.${{ matrix.runtime }}.tar" publish + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: sourcegit.${{ matrix.runtime }} + path: publish/* diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ce84579e..50e02dc9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,66 +8,22 @@ on: workflow_call: jobs: build: - strategy: - matrix: - include: - - name : Windows x64 - os: windows-2019 - runtime: win-x64 - - name : Windows ARM64 - os: windows-2019 - runtime: win-arm64 - - name : macOS (Intel) - os: macos-13 - runtime: osx-x64 - - name : macOS (Apple Silicon) - os: macos-latest - runtime: osx-arm64 - - name : Linux - os: ubuntu-20.04 - runtime: linux-x64 - - name : Linux (arm64) - os: ubuntu-20.04 - runtime: linux-arm64 - name: Build ${{ matrix.name }} - runs-on: ${{ matrix.os }} + name: Build + uses: ./.github/workflows/build.yml + version: + name: Prepare version string + runs-on: ubuntu-latest + outputs: + version: ${{ steps.version.outputs.version }} steps: - name: Checkout sources uses: actions/checkout@v4 - - name: Setup .NET - uses: actions/setup-dotnet@v4 - with: - dotnet-version: 8.0.x - - name: Configure arm64 packages - if: ${{ matrix.runtime == 'linux-arm64' }} - run: | - sudo dpkg --add-architecture arm64 - echo 'deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ focal main restricted - deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ focal-updates main restricted - deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ focal-backports main restricted' \ - | sudo tee /etc/apt/sources.list.d/arm64.list - sudo sed -i -e 's/^deb http/deb [arch=amd64] http/g' /etc/apt/sources.list - sudo sed -i -e 's/^deb mirror/deb [arch=amd64] mirror/g' /etc/apt/sources.list - - name: Install cross-compiling dependencies - if: ${{ matrix.runtime == 'linux-arm64' }} - run: | - sudo apt-get update - sudo apt-get install clang llvm gcc-aarch64-linux-gnu zlib1g-dev:arm64 - - name: Build - run: dotnet build -c Release - - name: Publish - run: dotnet publish src/SourceGit.csproj -c Release -o publish -r ${{ matrix.runtime }} - - name: Rename executable file - if: ${{ startsWith(matrix.runtime, 'linux-') }} - run: mv publish/SourceGit publish/sourcegit - - name: Tar artifact - if: ${{ startsWith(matrix.runtime, 'linux-') || startsWith(matrix.runtime, 'osx-') }} - run: | - tar -cvf "sourcegit.${{ matrix.runtime }}.tar" -C publish . - rm -r publish/* - mv "sourcegit.${{ matrix.runtime }}.tar" publish - - name: Upload artifact - uses: actions/upload-artifact@v4 - with: - name: sourcegit.${{ matrix.runtime }} - path: publish/* + - name: Output version string + id: version + run: echo "version=$(cat VERSION)" >> "$GITHUB_OUTPUT" + package: + needs: [build, version] + name: Package + uses: ./.github/workflows/package.yml + with: + version: ${{ needs.version.outputs.version }} diff --git a/.github/workflows/package.yml b/.github/workflows/package.yml index 0f6a8806..8c7def6b 100644 --- a/.github/workflows/package.yml +++ b/.github/workflows/package.yml @@ -7,12 +7,8 @@ on: required: true type: string jobs: - build: - name: Build - uses: ./.github/workflows/ci.yml windows-portable: name: Package portable Windows app - needs: build runs-on: ubuntu-latest strategy: matrix: @@ -37,7 +33,6 @@ jobs: path: build/sourcegit_*.zip osx-app: name: Package OSX app - needs: build runs-on: ubuntu-latest strategy: matrix: @@ -65,7 +60,6 @@ jobs: path: build/sourcegit_*.zip linux: name: Package Linux - needs: build runs-on: ubuntu-latest strategy: matrix: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 51e247d2..c19103e3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -4,6 +4,9 @@ on: tags: - v* jobs: + build: + name: Build + uses: ./.github/workflows/build.yml version: name: Prepare version string runs-on: ubuntu-latest @@ -16,13 +19,13 @@ jobs: TAG: ${{ github.ref_name }} run: echo "version=${TAG#v}" >> "$GITHUB_OUTPUT" package: - needs: version + needs: [build, version] name: Package uses: ./.github/workflows/package.yml with: version: ${{ needs.version.outputs.version }} release: - needs: [version, package] + needs: [package, version] name: Release runs-on: ubuntu-latest permissions: @@ -34,7 +37,8 @@ jobs: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} TAG: ${{ github.ref_name }} - run: gh release create "$TAG" -t "Release ${TAG#v}" --notes-from-tag + VERSION: ${{ needs.version.outputs.version }} + run: gh release create "$TAG" -t "Release $VERSION" --notes-from-tag - name: Download artifacts uses: actions/download-artifact@v4 with: @@ -45,5 +49,4 @@ jobs: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} TAG: ${{ github.ref_name }} - VERSION: ${{ needs.version.outputs.version }} run: gh release upload "$TAG" packages/*