name: Stockfish on: push: tags: - "*" branches: - master - tools - github_ci pull_request: branches: - master - tools concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true jobs: Prerelease: name: Prerelease if: github.repository == 'official-stockfish/Stockfish' && (github.ref == 'refs/heads/master' || (startsWith(github.ref_name, 'sf_') && github.ref_type == 'tag')) runs-on: ubuntu-latest needs: [Matrix, ARMCompilation, UniversalCompilation] permissions: contents: write # For deleting/creating a prerelease steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false fetch-depth: 0 # returns null if no pre-release exists - name: Get Commit SHA of Latest Pre-release run: | # Install required packages sudo apt-get update sudo apt-get install -y curl jq echo "COMMIT_SHA_TAG=$(jq -r 'map(select(.prerelease)) | first | .tag_name' <<< $(curl -s https://api.github.com/repos/${{ github.repository_owner }}/Stockfish/releases))" >> $GITHUB_ENV # delete old previous pre-release and tag - run: gh release delete ${{ env.COMMIT_SHA_TAG }} --cleanup-tag if: env.COMMIT_SHA_TAG != 'null' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Make sure that an old ci that still runs on master doesn't recreate a prerelease - name: Check Pullable Commits id: check_commits run: | git fetch CHANGES=$(git rev-list HEAD..origin/master --count) echo "CHANGES=$CHANGES" >> $GITHUB_ENV - name: Get last commit SHA id: last_commit run: echo "COMMIT_SHA=$(git rev-parse HEAD | cut -c 1-8)" >> $GITHUB_ENV - name: Get commit date id: commit_date run: echo "COMMIT_DATE=$(git show -s --date=format:'%Y%m%d' --format=%cd HEAD)" >> $GITHUB_ENV - name: Official Release? id: official_release # Check for "Official release version of Stockfish" in the commit message run: | if git log -1 --pretty=%B | grep -q "Official release version of Stockfish"; then echo "OFFICIAL_RELEASE=true" >> $GITHUB_ENV else echo "OFFICIAL_RELEASE=false" >> $GITHUB_ENV fi # Get recent commits for release body - name: Get commits in this push id: recent_commits run: | COMMITS=$(git log \ --format="- [\`%h\`](https://github.com/${{ github.repository }}/commit/%H) *%s*" \ ${{ github.event.before }}..HEAD) echo "COMMITS<> $GITHUB_OUTPUT echo "$COMMITS" >> $GITHUB_OUTPUT echo "EOF" >> $GITHUB_OUTPUT # Create a new pre-release, the other upload_binaries.yml will upload the binaries # to this pre-release. - name: Create Prerelease if: github.ref_name == 'master' && env.CHANGES == '0' && env.OFFICIAL_RELEASE == 'false' uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3.0.0 with: name: Stockfish dev-${{ env.COMMIT_DATE }}-${{ env.COMMIT_SHA }} tag_name: stockfish-dev-${{ env.COMMIT_DATE }}-${{ env.COMMIT_SHA }} prerelease: true body: | Precompiled binaries of the latest Stockfish development version, built automatically on every commit. > [!NOTE] > For stable, thoroughly tested builds use the [official releases](https://github.com/official-stockfish/Stockfish/releases). > Pre-releases may contain bugs. *Some platforms ship a **universal binary** that automatically selects the best instruction set for your CPU - no manual selection needed.* --- ## Commits ${{ steps.recent_commits.outputs.COMMITS }} [View all commits →](https://github.com/${{ github.repository }}/commits/master) Matrix: name: Prepare matrices runs-on: ubuntu-latest outputs: arm_matrix: ${{ steps.set-arm-matrix.outputs.arm_matrix }} universal_matrix: ${{ steps.set-universal-matrix.outputs.universal_matrix }} steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - id: set-arm-matrix run: | ARM_MATRIX=$(jq -c '.' .github/ci/arm_matrix.json) echo "ARM_MATRIX=$ARM_MATRIX" >> $GITHUB_OUTPUT - id: set-universal-matrix run: | UNIVERSAL_MATRIX=$(jq -c '.' .github/ci/universal_matrix.json) echo "UNIVERSAL_MATRIX=$UNIVERSAL_MATRIX" >> $GITHUB_OUTPUT # Testing Jobs IWYU: name: IWYU uses: ./.github/workflows/iwyu.yml Sanitizers: name: Sanitizers if: ${{ always() }} uses: ./.github/workflows/sanitizers.yml Tests: name: Tests if: ${{ always() }} uses: ./.github/workflows/tests.yml Matetrack: name: Matetrack if: ${{ always() }} uses: ./.github/workflows/matetrack.yml Games: name: Games if: ${{ always() }} uses: ./.github/workflows/games.yml CompilerCheck: name: Compiler check if: ${{ always() }} uses: ./.github/workflows/avx2_compilers.yml # Release Jobs ARMCompilation: name: Android builds needs: [Matrix, Sanitizers, Tests, Matetrack, Games, CompilerCheck] uses: ./.github/workflows/arm_compilation.yml with: matrix: ${{ needs.Matrix.outputs.arm_matrix }} UniversalCompilation: name: "Universal builds" needs: [Matrix, Sanitizers, Tests, Matetrack, Games, CompilerCheck] uses: ./.github/workflows/universal_compilation.yml ARM_Binaries: if: github.repository == 'official-stockfish/Stockfish' name: Android uploads needs: [Prerelease, Matrix] uses: ./.github/workflows/upload_binaries.yml with: matrix: ${{ needs.Matrix.outputs.arm_matrix }} permissions: contents: write # For deleting/creating a (pre)release secrets: token: ${{ secrets.GITHUB_TOKEN }} Universal_Binaries: if: github.repository == 'official-stockfish/Stockfish' name: Universal binaries needs: [Prerelease, Matrix] uses: ./.github/workflows/upload_binaries.yml with: matrix: ${{ needs.Matrix.outputs.universal_matrix }} permissions: contents: write # For deleting/creating a (pre)release secrets: token: ${{ secrets.GITHUB_TOKEN }}