diff --git a/README.md b/README.md index b772c7e..4187339 100644 --- a/README.md +++ b/README.md @@ -113,6 +113,18 @@ See [all releases](https://github.com/github/pages-gem/releases). To release a new version of this gem, run `script/release` from the `master` branch. +This will create and tag the release. + +It will also create prs in the relevant repos and assign them to you. It is your responsibility to + +1. update the version of the gem in those repos +2. deploy those services as needed + +The relevant repos are: +1. [github-pages](https://github.com/github/pages) +2. [jekyll-build-pages](https://github.com/actions/jekyll-build-pages/blob/main/Gemfile) +3. [pages.github.com](https://github.com/github/pages.github.com) + ## License Distributed under the [MIT License](LICENSE). diff --git a/gh_pages_commit_input.json b/gh_pages_commit_input.json new file mode 100644 index 0000000..dfdfbc5 --- /dev/null +++ b/gh_pages_commit_input.json @@ -0,0 +1,7 @@ +{ + "tree": "8e473762f00cab18744b90f7d32557410e549869", + "parents": [ + "cd957f6dab7a16078dbcb08576d7b60214192f43" + ], + "message": "automated commit for pr creation" +} \ No newline at end of file diff --git a/script/release b/script/release index a67084b..54ba104 100755 --- a/script/release +++ b/script/release @@ -39,4 +39,53 @@ git fetch -t origin # Tag it and bag it. gem push github-pages-*.gem && git tag "$tag" && - git push origin master && git push origin "$tag" +git push origin master && git push origin "$tag" + +# create a new release on github +gh release create "$tag" --notes "Automated release for $tag" + +#for each dependent repo, create a new branch an a blank pr. +# first get the sha of main for each repo + +gh_pages_sha = gh api repos/github/pages/git/refs/heads/master | jq '. | .object.sha' +jekyll_sha = gh api repos/actions/jekyll-build-pages/git/refs/heads/main | jq '. | .object.sha' +gh_pages_site_sha = gh api repos/github/pages.github.com/git/refs/heads/master | jq '. | .object.sha' + +# then create the branches + +gh api repos/github/pages/git/refs -F "sha"="$gh_pages_sha" -F "ref"="refs/heads/pages-gem-release-$tag" +gh api repos/github/pages/git/refs -F "sha"="$jekyll_sha" -F "ref"="refs/heads/pages-gem-release-$tag" +gh api repos/github/pages/git/refs -F "sha"="$gh_pages_site_sha" -F "ref"="refs/heads/pages-gem-release-$tag" + +#then we need the tree object so we can create a commit using the api + +gh_pages_tree = gh api repos/github/pages/git/commits/$gh_pages_sha | jq '. | .tree.sha' +jekyll_tree = gh api repos/github/actions/jekyll-build-pages/commits/$jekyll_sha | jq '. | .tree.sha' +gh_pages_site_tree = gh api repos/github/papages.github.comges/git/commits/$gh_pages_site_sha | jq '. | .tree.sha' + +# create the input file for the commit. We have to do this because the F flag doesn't support arrays + +echo "{\"tree\": \"$gh_pages_tree\", \"parents\": [\"$gh_pages_sha\"], \"message\": \"automated commit for pr creation\"}" > gh_pages_commit_input.json +echo "{\"tree\": \"$jekyll_tree\", \"parents\": [\"$jekyll_sha\"], \"message\": \"automated commit for pr creation\"}" > jekyll_commit_input.json +echo "{\"tree\": \"$gh_pages_site_tree\", \"parents\": [\"$gh_pages_site_sha\"], \"message\": \"automated commit for pr creation\"}" > gh_pages_site_commit_input.json + +# create the commit + +new_gh_pages_sha = gh api repos/github/pages/git/commits --input gh_pages_commit_input.json | jq '. | .sha' +new_jekyll_sha = gh api repos/actions/jekyll-build-pages/git/commits --input jekyll_commit_input.json | jq '. | .sha' +new_gh_pages_site_sha = gh api repos/github/pages.github.com/git/commits --input gh_pages_site_commit_input.json | jq '. | .sha' + +# associate the commit with the branch + +gh api repos/github/pages/git/refs/heads/pages-gem-release-$tag -F "sha"="$new_gh_pages_sha" -F "ref"="refs/heads/pages-gem-release-$tag" -F "force"="true" +gh api repos/actions/jekyll-build-pages/git/refs/heads/pages-gem-release-$tag -F "sha"="$new_jekyll_sha" -F "ref"="refs/heads/pages-gem-release-$tag" -F "force"="true" +gh api repos/github/pages.github.com/git/refs/heads/pages-gem-release-$tag -F "sha"="$new_gh_pages_site_sha" -F "ref"="refs/heads/pages-gem-release-$tag" -F "force"="true" + +# create pull requests in downstream repos +gh pr create --base "master" --reviewer "@me" --head "pages-gem-release-$tag" --title "Bump pages-gem version to $tag" --assignee "@me" --body "Bump pages-gem version to $tag. You must manually make those changes and commit to this branch" --repo "github/pages" +gh pr create --base "main" --reviewer "@me" --head "pages-gem-release-$tag" --title "Bump pages-gem version to $tag" --assignee "@me" --body "Bump pages-gem version to $tag. You must manually make those changes and commit to this branch" --repo "actions/jekyll-build-pages" +gh pr create --base "master" --reviewer "@me" --head "pages-gem-release-$tag" --title "Bump pages-gem version to $tag" --assignee "@me" --body "Bump pages-gem version to $tag. You must manually make those changes and commit to this branch" --repo "github/pages.github.com" + +# clean up the input file for the commit + +rm gh_pages_commit_input.json jekyll_commit_input.json gh_pages_site_commit_input.json \ No newline at end of file