diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6fd521da7..b76bd66ad 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -84,11 +84,21 @@ jobs: - name: Detect if commit is tagged id: detect_tag run: | - if git describe --exact-match --tags HEAD >/dev/null 2>&1; then - echo "tagged=true" >> "$GITHUB_OUTPUT" - else - echo "tagged=false" >> "$GITHUB_OUTPUT" + tag="$(git describe --exact-match --tags HEAD 2>/dev/null || true)" + # If HEAD is a merge commit, the PR head is usually the second parent (HEAD^2). + if [ -z "$tag" ] && git rev-parse -q --verify HEAD^2 >/dev/null 2>&1; then + tag="$(git describe --exact-match --tags HEAD^2 2>/dev/null || true)" fi + echo "Found tag: ${tag}" + echo "tagged=$tag" >> "$GITHUB_OUTPUT" + + - name: Check out exact tag + if: ${{ steps.detect_tag.outputs.tagged }} + uses: actions/checkout@v4 + with: + ref: ${{ steps.detect_tag.outputs.tagged }} + fetch-depth: 0 + fetch-tags: true - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 @@ -142,14 +152,14 @@ jobs: env_vars: OS, python - name: Build Borg fat binaries (${{ matrix.binary }}) - if: ${{ matrix.binary && steps.detect_tag.outputs.tagged == 'true' }} + if: ${{ matrix.binary && steps.detect_tag.outputs.tagged }} run: | pip install 'pyinstaller==6.14.2' mkdir -p dist/binary pyinstaller --clean --distpath=dist/binary scripts/borg.exe.spec - name: Smoke-test the built binary (${{ matrix.binary }}) - if: ${{ matrix.binary && steps.detect_tag.outputs.tagged == 'true' }} + if: ${{ matrix.binary && steps.detect_tag.outputs.tagged }} run: | pushd dist/binary echo "single-file binary" @@ -162,7 +172,7 @@ jobs: popd - name: Prepare binaries (${{ matrix.binary }}) - if: ${{ matrix.binary && steps.detect_tag.outputs.tagged == 'true' }} + if: ${{ matrix.binary && steps.detect_tag.outputs.tagged }} run: | mkdir -p artifacts if [ -f dist/binary/borg.exe ]; then @@ -175,7 +185,7 @@ jobs: ls -l artifacts/ - name: Upload binaries (${{ matrix.binary }}) - if: ${{ matrix.binary && steps.detect_tag.outputs.tagged == 'true' }} + if: ${{ matrix.binary && steps.detect_tag.outputs.tagged }} uses: actions/upload-artifact@v4 with: name: ${{ matrix.binary }}