# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

name: Cancel

on:
  workflow_run:
    workflows:
      - "Build python source distribution and wheels"
      - "Java Tests"
      - "Python tests"
    types: ['requested']

jobs:
  cancel-duplicate-workflow-runs:
    permissions:
      actions: write
      checks: read
      contents: read
      issues: write
      pull-requests: write
    name: "Cancel duplicate workflow runs"
    runs-on: ubuntu-latest
    steps:
      - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
        uses: actions/checkout@v6
        with:
          persist-credentials: false
          submodules: recursive
      - uses: ./.github/actions/cancel-workflow-runs
        name: "Cancel duplicate workflow runs"
        with:
          cancelMode: duplicates
          notifyPRCancel: true
          token: ${{ secrets.GITHUB_TOKEN }}
          sourceRunId: ${{ github.event.workflow_run.id }}
