Compare commits
3 Commits
v202007141
...
v202007021
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5e7eb8c815 | ||
|
|
4a0f705cd2 | ||
|
|
1bf4f689ec |
1
.github/workflows/ci.yml
vendored
1
.github/workflows/ci.yml
vendored
@@ -1,7 +1,6 @@
|
||||
name: CI
|
||||
on:
|
||||
pull_request:
|
||||
workflow_dispatch:
|
||||
jobs:
|
||||
CI:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
project_name: gh
|
||||
project_name: actions-sync
|
||||
|
||||
builds:
|
||||
- <<: &build_defaults
|
||||
|
||||
22
README.md
22
README.md
@@ -1,22 +1,10 @@
|
||||
# Actions Sync
|
||||
# actions-sync
|
||||
|
||||
<p align="center">
|
||||
<img src="docs/arrow.png">
|
||||
</p>
|
||||
Sync GitHub Action repositories from https://www.github.com to your GHES instance.
|
||||
|
||||
This is a standalone Go tool to allow you to sync from [GitHub](https://www.github.com) to a [GitHub Enterprise instance](https://github.com/enterprise). GitHub Enterprise is referred to as `GHES` throughout this document.
|
||||
## Non air-gapped GHES instances
|
||||
|
||||
* Current status: **ready for production use**
|
||||
* Download from: [releases page](https://github.com/actions/actions-sync/releases/)
|
||||
* Build status: 
|
||||
|
||||
It is designed to work when:
|
||||
* The GitHub Enterprise instance is seperate from the rest of the internet.
|
||||
* The GitHub Enterprise instance is connected to the rest of the internet.
|
||||
|
||||
## Connected instances
|
||||
|
||||
When there are machines which have access to both the public internet and the GHES instance run `actions-sync sync`.
|
||||
When there are machines which have access to both the public interenet and the the GHES instance run `actions-sync sync`.
|
||||
|
||||
**Command:**
|
||||
|
||||
@@ -47,7 +35,7 @@ When there are machines which have access to both the public internet and the GH
|
||||
--repo-name actions/setup-node
|
||||
```
|
||||
|
||||
## Not connected instances
|
||||
## Air-gapped GHES instances
|
||||
|
||||
When no machine has access to both the public internet and the GHES instance:
|
||||
|
||||
|
||||
BIN
docs/arrow.png
BIN
docs/arrow.png
Binary file not shown.
|
Before Width: | Height: | Size: 4.8 KiB |
@@ -21,34 +21,34 @@ trap "after_suite" SIGINT
|
||||
|
||||
function test_pull() {
|
||||
# Pull new repo
|
||||
setup_src "org/repo:heads/main:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
setup_src "org/repo:heads/master:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
setup_cache
|
||||
pull --repo-name "org/repo" "pulling new repo"
|
||||
assert_cache_sha "org/repo" "heads/main" "a5984bb887dd2fcdc2892cd906d6f004844d1142" "pulling new repo org/repo"
|
||||
assert_cache_sha "org/repo" "heads/master" "a5984bb887dd2fcdc2892cd906d6f004844d1142" "pulling new repo org/repo"
|
||||
|
||||
echo "all pull tests passed successfully"
|
||||
}
|
||||
|
||||
function test_push() {
|
||||
# Push with a new change to main
|
||||
setup_cache "org/repo:heads/main:e9009d51dd6da2c363d1d14779c53dd27fcb0c52"
|
||||
setup_dest "org/repo:heads/main:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
# Push with a new change to master
|
||||
setup_cache "org/repo:heads/master:e9009d51dd6da2c363d1d14779c53dd27fcb0c52"
|
||||
setup_dest "org/repo:heads/master:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
|
||||
push "pushing new commit to main"
|
||||
assert_dest_sha "org/repo" "heads/main" "e9009d51dd6da2c363d1d14779c53dd27fcb0c52" "updating org/repo:heads/main to new commit"
|
||||
push "pushing new commit to master"
|
||||
assert_dest_sha "org/repo" "heads/master" "e9009d51dd6da2c363d1d14779c53dd27fcb0c52" "updating org/repo:heads/master to new commit"
|
||||
|
||||
# Push a non-linear change
|
||||
setup_cache "org/repo:heads/main:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
setup_dest "org/repo:heads/main:e9009d51dd6da2c363d1d14779c53dd27fcb0c52"
|
||||
setup_cache "org/repo:heads/master:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
setup_dest "org/repo:heads/master:e9009d51dd6da2c363d1d14779c53dd27fcb0c52"
|
||||
|
||||
push "pushing to an old commit to main"
|
||||
assert_dest_sha "org/repo" "heads/main" "a5984bb887dd2fcdc2892cd906d6f004844d1142" "updating heads/main to an old commit"
|
||||
push "pushing to an old commit to master"
|
||||
assert_dest_sha "org/repo" "heads/master" "a5984bb887dd2fcdc2892cd906d6f004844d1142" "updating heads/master to an old commit"
|
||||
|
||||
# Push with no changes to main
|
||||
setup_cache "org/repo:heads/main:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
setup_dest "org/repo:heads/main:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
push "pushing no changes to main"
|
||||
assert_dest_sha "org/repo" "heads/main" "a5984bb887dd2fcdc2892cd906d6f004844d1142" "leaving org/repo:heads/main at existing commit"
|
||||
# Push with no changes to master
|
||||
setup_cache "org/repo:heads/master:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
setup_dest "org/repo:heads/master:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
push "pushing no changes to master"
|
||||
assert_dest_sha "org/repo" "heads/master" "a5984bb887dd2fcdc2892cd906d6f004844d1142" "leaving org/repo:heads/master at existing commit"
|
||||
|
||||
# Push multiple branches
|
||||
setup_cache "org/repo:heads/change:e9009d51dd6da2c363d1d14779c53dd27fcb0c52" \
|
||||
@@ -61,86 +61,86 @@ function test_push() {
|
||||
assert_dest_sha "org/repo" "heads/nochange" "a5984bb887dd2fcdc2892cd906d6f004844d1142" "leaving org/repo:heads/nochange at existing commit"
|
||||
|
||||
# Pushing multiple branches and tags
|
||||
setup_cache "org/repo:heads/main:e9009d51dd6da2c363d1d14779c53dd27fcb0c52" \
|
||||
setup_cache "org/repo:heads/master:e9009d51dd6da2c363d1d14779c53dd27fcb0c52" \
|
||||
"org/repo:tags/v1:e9009d51dd6da2c363d1d14779c53dd27fcb0c52"
|
||||
setup_dest "org/repo:heads/main:a5984bb887dd2fcdc2892cd906d6f004844d1142" \
|
||||
setup_dest "org/repo:heads/master:a5984bb887dd2fcdc2892cd906d6f004844d1142" \
|
||||
"org/repo:tags/v1:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
|
||||
push "pushing multiple branches and tags"
|
||||
assert_dest_sha "org/repo" "heads/main" "e9009d51dd6da2c363d1d14779c53dd27fcb0c52" "updating org/repo:heads/main to new commit"
|
||||
assert_dest_sha "org/repo" "heads/master" "e9009d51dd6da2c363d1d14779c53dd27fcb0c52" "updating org/repo:heads/master to new commit"
|
||||
assert_dest_sha "org/repo" "tags/v1" "e9009d51dd6da2c363d1d14779c53dd27fcb0c52" "updating org/repo:tags/v1 to new commit"
|
||||
|
||||
# Pushing multiple repositories
|
||||
setup_cache "org1/repo1:heads/main:e9009d51dd6da2c363d1d14779c53dd27fcb0c52" \
|
||||
"org1/repo2:heads/main:e9009d51dd6da2c363d1d14779c53dd27fcb0c52" \
|
||||
setup_cache "org1/repo1:heads/master:e9009d51dd6da2c363d1d14779c53dd27fcb0c52" \
|
||||
"org1/repo2:heads/master:e9009d51dd6da2c363d1d14779c53dd27fcb0c52" \
|
||||
"org1/repo2:tags/v1:e9009d51dd6da2c363d1d14779c53dd27fcb0c52" \
|
||||
"org2/repo1:heads/main:e9009d51dd6da2c363d1d14779c53dd27fcb0c52"
|
||||
setup_dest "org1/repo1:heads/main:a5984bb887dd2fcdc2892cd906d6f004844d1142" \
|
||||
"org1/repo2:heads/main:a5984bb887dd2fcdc2892cd906d6f004844d1142" \
|
||||
"org2/repo1:heads/master:e9009d51dd6da2c363d1d14779c53dd27fcb0c52"
|
||||
setup_dest "org1/repo1:heads/master:a5984bb887dd2fcdc2892cd906d6f004844d1142" \
|
||||
"org1/repo2:heads/master:a5984bb887dd2fcdc2892cd906d6f004844d1142" \
|
||||
"org1/repo2:tags/v1:a5984bb887dd2fcdc2892cd906d6f004844d1142" \
|
||||
"org2/repo1:heads/main:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
"org2/repo1:heads/master:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
|
||||
push "pushing multiple repositories"
|
||||
assert_dest_sha "org1/repo1" "heads/main" "e9009d51dd6da2c363d1d14779c53dd27fcb0c52" "updating org1/repo1:heads/main to new commit"
|
||||
assert_dest_sha "org1/repo2" "heads/main" "e9009d51dd6da2c363d1d14779c53dd27fcb0c52" "updating org1/repo2:heads/main to new commit"
|
||||
assert_dest_sha "org1/repo1" "heads/master" "e9009d51dd6da2c363d1d14779c53dd27fcb0c52" "updating org1/repo1:heads/master to new commit"
|
||||
assert_dest_sha "org1/repo2" "heads/master" "e9009d51dd6da2c363d1d14779c53dd27fcb0c52" "updating org1/repo2:heads/master to new commit"
|
||||
assert_dest_sha "org1/repo2" "tags/v1" "e9009d51dd6da2c363d1d14779c53dd27fcb0c52" "updating org1/repo2:tags/v1 to new commit"
|
||||
assert_dest_sha "org2/repo1" "heads/main" "e9009d51dd6da2c363d1d14779c53dd27fcb0c52" "updating org2/repo1:tags/v1 to new commit"
|
||||
assert_dest_sha "org2/repo1" "heads/master" "e9009d51dd6da2c363d1d14779c53dd27fcb0c52" "updating org2/repo1:tags/v1 to new commit"
|
||||
|
||||
echo "all push tests passed successfully"
|
||||
}
|
||||
|
||||
function test_sync() {
|
||||
# Sync no change without cached
|
||||
setup_src "org/repo:heads/main:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
setup_src "org/repo:heads/master:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
setup_cache
|
||||
setup_dest "org/repo:heads/main:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
setup_dest "org/repo:heads/master:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
sync --repo-name "org/repo" "syncing a new commit in an uncached repo"
|
||||
assert_dest_sha "org/repo" "heads/main" "a5984bb887dd2fcdc2892cd906d6f004844d1142" "syncing no changes without cache"
|
||||
assert_dest_sha "org/repo" "heads/master" "a5984bb887dd2fcdc2892cd906d6f004844d1142" "syncing no changes without cache"
|
||||
|
||||
# Sync a new commit without cache
|
||||
setup_src "org/repo:heads/main:e9009d51dd6da2c363d1d14779c53dd27fcb0c52"
|
||||
setup_src "org/repo:heads/master:e9009d51dd6da2c363d1d14779c53dd27fcb0c52"
|
||||
setup_cache
|
||||
setup_dest "org/repo:heads/main:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
setup_dest "org/repo:heads/master:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
sync --repo-name "org/repo" "syncing a new commit in an uncached repo"
|
||||
assert_dest_sha "org/repo" "heads/main" "e9009d51dd6da2c363d1d14779c53dd27fcb0c52" "syncing a new commit without cache"
|
||||
assert_dest_sha "org/repo" "heads/master" "e9009d51dd6da2c363d1d14779c53dd27fcb0c52" "syncing a new commit without cache"
|
||||
|
||||
# Sync no change with uncached
|
||||
setup_src "org/repo:heads/main:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
setup_cache "org/repo:heads/main:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
setup_dest "org/repo:heads/main:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
setup_src "org/repo:heads/master:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
setup_cache "org/repo:heads/master:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
setup_dest "org/repo:heads/master:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
sync --repo-name "org/repo" "syncing a new commit in an uncached repo"
|
||||
assert_dest_sha "org/repo" "heads/main" "a5984bb887dd2fcdc2892cd906d6f004844d1142" "syncing no changes with cache"
|
||||
assert_dest_sha "org/repo" "heads/master" "a5984bb887dd2fcdc2892cd906d6f004844d1142" "syncing no changes with cache"
|
||||
|
||||
# Sync a new commit with cache
|
||||
setup_src "org/repo:heads/main:e9009d51dd6da2c363d1d14779c53dd27fcb0c52"
|
||||
setup_cache "org/repo:heads/main:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
setup_dest "org/repo:heads/main:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
setup_src "org/repo:heads/master:e9009d51dd6da2c363d1d14779c53dd27fcb0c52"
|
||||
setup_cache "org/repo:heads/master:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
setup_dest "org/repo:heads/master:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
sync --repo-name "org/repo" "syncing a new commit in an uncached repo"
|
||||
assert_dest_sha "org/repo" "heads/main" "e9009d51dd6da2c363d1d14779c53dd27fcb0c52" "syncing a new commit with cache"
|
||||
assert_dest_sha "org/repo" "heads/master" "e9009d51dd6da2c363d1d14779c53dd27fcb0c52" "syncing a new commit with cache"
|
||||
|
||||
# Sync a non-linear change without cache
|
||||
setup_src "org/repo:heads/main:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
setup_src "org/repo:heads/master:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
setup_cache
|
||||
setup_dest "org/repo:heads/main:e9009d51dd6da2c363d1d14779c53dd27fcb0c52"
|
||||
setup_dest "org/repo:heads/master:e9009d51dd6da2c363d1d14779c53dd27fcb0c52"
|
||||
|
||||
sync --repo-name "org/repo" "syncing an old commit in an uncached repo"
|
||||
assert_dest_sha "org/repo" "heads/main" "a5984bb887dd2fcdc2892cd906d6f004844d1142" "syncing heads/main to an old commit without cache"
|
||||
assert_dest_sha "org/repo" "heads/master" "a5984bb887dd2fcdc2892cd906d6f004844d1142" "syncing heads/master to an old commit without cache"
|
||||
|
||||
# Sync a non-linear change with cache
|
||||
setup_src "org/repo:heads/main:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
setup_cache "org/repo:heads/main:e9009d51dd6da2c363d1d14779c53dd27fcb0c52"
|
||||
setup_dest "org/repo:heads/main:e9009d51dd6da2c363d1d14779c53dd27fcb0c52"
|
||||
setup_src "org/repo:heads/master:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
setup_cache "org/repo:heads/master:e9009d51dd6da2c363d1d14779c53dd27fcb0c52"
|
||||
setup_dest "org/repo:heads/master:e9009d51dd6da2c363d1d14779c53dd27fcb0c52"
|
||||
|
||||
sync --repo-name "org/repo" "syncing an old commit in an cached repo"
|
||||
assert_dest_sha "org/repo" "heads/main" "a5984bb887dd2fcdc2892cd906d6f004844d1142" "syncing heads/main to an old commit with cache"
|
||||
assert_dest_sha "org/repo" "heads/master" "a5984bb887dd2fcdc2892cd906d6f004844d1142" "syncing heads/master to an old commit with cache"
|
||||
|
||||
# Sync to a different repo
|
||||
setup_src "org/repo:heads/main:e9009d51dd6da2c363d1d14779c53dd27fcb0c52"
|
||||
setup_src "org/repo:heads/master:e9009d51dd6da2c363d1d14779c53dd27fcb0c52"
|
||||
setup_cache
|
||||
setup_dest "org2/repo2:heads/main:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
setup_dest "org2/repo2:heads/master:a5984bb887dd2fcdc2892cd906d6f004844d1142"
|
||||
|
||||
sync --repo-name "org/repo:org2/repo2" "syncing org/repo aliased to org2/repo2"
|
||||
assert_dest_sha "org2/repo2" "heads/main" "e9009d51dd6da2c363d1d14779c53dd27fcb0c52" "syncing org/repo aliased to org2/repo2"
|
||||
assert_dest_sha "org2/repo2" "heads/master" "e9009d51dd6da2c363d1d14779c53dd27fcb0c52" "syncing org/repo aliased to org2/repo2"
|
||||
|
||||
echo "all sync tests passed successfully"
|
||||
}
|
||||
|
||||
@@ -93,7 +93,7 @@ func getOrCreateGitHubRepo(ctx context.Context, client *github.Client, repoName,
|
||||
HasProjects: github.Bool(false),
|
||||
}
|
||||
ghRepo, resp, err := client.Repositories.Create(ctx, orgName, repo)
|
||||
if resp != nil && resp.StatusCode == 422 {
|
||||
if resp.StatusCode == 422 {
|
||||
ghRepo, _, err = client.Repositories.Get(ctx, orgName, repoName)
|
||||
}
|
||||
if err != nil {
|
||||
|
||||
2
test/fixtures/repo.git/HEAD
vendored
2
test/fixtures/repo.git/HEAD
vendored
@@ -1 +1 @@
|
||||
ref: refs/heads/main
|
||||
ref: refs/heads/master
|
||||
|
||||
Reference in New Issue
Block a user