mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-24 20:10:13 +01:00
80 lines
2.3 KiB
Bash
Executable File
80 lines
2.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# Part of the Carbon Language project, under the Apache License v2.0 with LLVM
|
|
# Exceptions. See /LICENSE for license information.
|
|
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
#
|
|
# Sync directories in the main Carbon repository into dedicated child
|
|
# repositories to better match repository-oriented installing and tooling.
|
|
|
|
set -eux
|
|
|
|
ORIGIN_DIR="$PWD"
|
|
COMMIT_SHA="$(git rev-parse --short $GITHUB_SHA)"
|
|
COMMIT_SUMMARY="Original $(git show -s --pretty=full "$COMMIT_SHA")
|
|
|
|
$(git diff --summary "${COMMIT_SHA}^!")
|
|
"
|
|
|
|
# Setup global git configuration.
|
|
GIT_USERNAME="CarbonInfraBot"
|
|
git config --global user.email "carbon-external-infra@google.com"
|
|
git config --global user.name "$GIT_USERNAME"
|
|
|
|
declare -A MIRRORS
|
|
MIRRORS["utils/vim"]="vim-carbon-lang"
|
|
|
|
for dir in "${!MIRRORS[@]}"; do
|
|
SRC_DIR="$dir"
|
|
DEST_REPO="${MIRRORS[$SRC_DIR]}"
|
|
DEST_REPO_URL="https://$GIT_USERNAME:$API_TOKEN_GITHUB@github.com/carbon-language/$DEST_REPO.git"
|
|
DEST_CLONE_DIR="$(mktemp -d)"
|
|
|
|
git clone --single-branch "$DEST_REPO_URL" "$DEST_CLONE_DIR"
|
|
cd "$DEST_CLONE_DIR"
|
|
|
|
# Print out the destination repository to help with debugging failures in
|
|
# GitHub's actions.
|
|
ls -al
|
|
|
|
# Remove all the existing files to rebuild it from scratch. We ignore when
|
|
# this matches no files to handle freshly created repositories. Also print the
|
|
# status afterward for debugging.
|
|
git rm --ignore-unmatch -r .
|
|
git status
|
|
|
|
# Copy the basic framework from the origin repository.
|
|
cp "$ORIGIN_DIR/.gitignore" \
|
|
"$ORIGIN_DIR/CODE_OF_CONDUCT.md" \
|
|
"$ORIGIN_DIR/LICENSE" \
|
|
.
|
|
|
|
# Copy the mirrored directory. We use `rsync` to get a more reliable way of
|
|
# handling the mirroring of the contents of a directory. We also make this
|
|
# verbose to help with debugging action failures on GitHub.
|
|
rsync -av "$ORIGIN_DIR/$SRC_DIR/" .
|
|
|
|
# Add back all the files now, and print the status for debugging.
|
|
git add -A
|
|
git status
|
|
|
|
# See if there is anything to commit and push. This works the same way as
|
|
# diff(1) and so exits zero when there are no changes.
|
|
if ! git diff --cached --quiet; then
|
|
# Commit the new state.
|
|
git commit -F- <<EOF
|
|
Sync $DEST_REPO to carbon-language/carbon-lang@$COMMIT_SHA
|
|
|
|
$COMMIT_SUMMARY
|
|
EOF
|
|
git log
|
|
|
|
# Push the new commit.
|
|
git push
|
|
fi
|
|
|
|
# Cleanup.
|
|
cd "$ORIGIN_DIR"
|
|
rm -rf "$DEST_CLONE_DIR"
|
|
done
|