| # Copyright 2026 The BoringSSL Authors | |
| # | |
| # Licensed 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 | |
| # | |
| # https://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: Check Branch Time | |
| on: | |
| schedule: | |
| - cron: '0 */12 * * *' # Run every 12 hours. | |
| workflow_dispatch: # Allows you to run the check manually from the UI | |
| env: | |
| UPSTREAM_URL: 'https://boringssl.googlesource.com/boringssl' | |
| BRANCH_NAME: 'main' | |
| MAX_TIME_LAG_SECONDS: 86400 # 24 hours | |
| jobs: | |
| check-mirror: | |
| if: github.repository == 'google/boringssl' | |
| runs-on: ubuntu-latest | |
| permissions: read-all | |
| steps: | |
| - name: Checkout GitHub Repository | |
| uses: actions/checkout@v6 | |
| with: | |
| ref: 'main' | |
| fetch-depth: 0 # Required to accurately count commits and find ancestors | |
| - name: Add and Fetch Upstream Source of Truth | |
| run: | | |
| git remote add upstream ${{ env.UPSTREAM_URL }} | |
| git fetch upstream ${{ env.BRANCH_NAME }} | |
| - name: Verify Commit Times & Lag | |
| run: | | |
| # Check if the current GitHub HEAD exists in Upstream | |
| GH_HEAD_HASH=$(git rev-parse HEAD) | |
| if ! git merge-base --is-ancestor $GH_HEAD_HASH upstream/${{ env.BRANCH_NAME }}; then | |
| echo "::error::GitHub HEAD ($GH_HEAD_HASH) is not an ancestor of Upstream HEAD. Has the mirror diverged or rebased?" | |
| exit 1 | |
| fi | |
| # Get the hash of the most recent upstream commit that is older than MAX_TIME_LAG_SECONDS | |
| WANT_COMMIT=$(git rev-list -n 1 --before="${{ env.MAX_TIME_LAG_SECONDS }} seconds ago" upstream/${{ env.BRANCH_NAME }}) | |
| # This should not happen. | |
| if [ -z "$WANT_COMMIT" ]; then | |
| echo "::error::Could not find an upstream commit older than ${{ env.MAX_TIME_LAG_SECONDS }} seconds." | |
| exit 1 | |
| fi | |
| echo "Latest upstream commit as of ${{ env.MAX_TIME_LAG_SECONDS }} seconds ago: $WANT_COMMIT" | |
| if git merge-base --is-ancestor $WANT_COMMIT $GH_HEAD_HASH; then | |
| echo "GitHub HEAD is up-to-date with upstream as of ${{ env.MAX_TIME_LAG_SECONDS }} seconds ago." | |
| exit 0 | |
| else | |
| echo "::error::GitHub HEAD ($GH_HEAD_HASH) is behind the upstream commit from ${{ env.MAX_TIME_LAG_SECONDS }} seconds ago ($WANT_COMMIT)." | |
| echo "The import may be stuck or delayed." | |
| exit 1 | |
| fi |