From 7a45d6e75c79331c96f5963c0399b2b2a6179693 Mon Sep 17 00:00:00 2001 From: James Ives Date: Thu, 6 Jan 2022 13:21:35 +0000 Subject: [PATCH] Allow single-commit to work cross repo (#979) * Adjustments * Formatting --- README.md | 2 +- SECURITY.md | 2 +- __tests__/main.test.ts | 1 + src/lib.ts | 10 +++++----- src/worktree.ts | 15 +++++++++++++-- 5 files changed, 21 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 4aad6326f..81697d633 100644 --- a/README.md +++ b/README.md @@ -137,7 +137,7 @@ By default the action does not need any token configuration and uses the provide | Key | Value Information | Type | Required | | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | -------- | | `git-config-name` | Allows you to customize the name that is attached to the git config which is used when pushing the deployment commits. If this is not included it will use the name in the GitHub context, followed by the name of the action. | `with` | **No** | -| `git-config-email` | Allows you to customize the email that is attached to the git config which is used when pushing the deployment commits. If this is not included it will use the email in the GitHub context, followed by a generic noreply GitHub email. You can include `<>` for the value if you wish to omit this field altogether and push the commits without an email. | `with` | **No** | +| `git-config-email` | Allows you to customize the email that is attached to the git config which is used when pushing the deployment commits. If this is not included it will use the email in the GitHub context, followed by a generic noreply GitHub email. You can include `<>` for the value if you wish to omit this field altogether and push the commits without an email. | `with` | **No** | | `repository-name` | Allows you to specify a different repository path so long as you have permissions to push to it. This should be formatted like so: `JamesIves/github-pages-deploy-action`. You'll need to use a PAT in the `token` input for this configuration option to work properly. | `with` | **No** | | `target-folder` | If you'd like to push the contents of the deployment folder into a specific directory on the deployment branch you can specify it here. | `with` | **No** | | `commit-message` | If you need to customize the commit message for an integration you can do so. | `with` | **No** | diff --git a/SECURITY.md b/SECURITY.md index 0ff879b04..917da7150 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -7,7 +7,7 @@ The current version is actively maintained and will receive frequent updates and | Version | Supported | | ------- | ------------------ | | 4.0.x | :white_check_mark: | -| < 4.0.0 | :x: | +| < 4.0.0 | :x: | ## Reporting a Vulnerability diff --git a/__tests__/main.test.ts b/__tests__/main.test.ts index 510e7c65e..e538decf3 100644 --- a/__tests__/main.test.ts +++ b/__tests__/main.test.ts @@ -2,6 +2,7 @@ process.env['INPUT_FOLDER'] = 'build' process.env['GITHUB_SHA'] = '123' process.env['INPUT_DEBUG'] = 'debug' +process.env['GITHUB_REF_NAME'] = 'test' import '../src/main' import {action, TestFlag} from '../src/constants' diff --git a/src/lib.ts b/src/lib.ts index 5703e7c0c..6af2976de 100644 --- a/src/lib.ts +++ b/src/lib.ts @@ -23,12 +23,12 @@ export default async function run( info(` GitHub Pages Deploy Action πŸš€ - πŸš€ Getting Started Guide: https://github.com/marketplace/actions/deploy-to-github-pages - ❓ Discussions / Q&A: https://github.com/JamesIves/github-pages-deploy-action/discussions - πŸ”§ Report a Bug: https://github.com/JamesIves/github-pages-deploy-action/issues - + πŸ’– Support: https://github.com/sponsors/JamesIves πŸ“£ Maintained by James Ives: https://jamesiv.es - πŸ’– Support: https://github.com/sponsors/JamesIves`) + + πŸš€ Getting Started Guide: https://github.com/JamesIves/github-pages-deploy-action + ❓ Discussions / Q&A: https://github.com/JamesIves/github-pages-deploy-action/discussions + πŸ”§ Report a Bug: https://github.com/JamesIves/github-pages-deploy-action/issues`) info('Checking configuration and starting deployment… 🚦') diff --git a/src/worktree.ts b/src/worktree.ts index 9ef472221..d45174283 100644 --- a/src/worktree.ts +++ b/src/worktree.ts @@ -43,28 +43,39 @@ export async function generateWorktree( action.workspace, action.silent ) + const checkout = new GitCheckout(action.branch) + if (branchExists) { // There's existing data on the branch to check out checkout.commitish = `origin/${action.branch}` } - if (!branchExists || action.singleCommit) { - // Create a new history if we don't have the branch, or if we want to reset it + + if ( + !branchExists || + (action.singleCommit && action.branch !== process.env.GITHUB_REF_NAME) + ) { + /* Create a new history if we don't have the branch, or if we want to reset it. + If the ref name is the same as the branch name, do not attempt to create an orphan of it. */ checkout.orphan = true } + await execute( checkout.toString(), `${action.workspace}/${worktreedir}`, action.silent ) + if (!branchExists) { info(`Created the ${action.branch} branch… πŸ”§`) + // Our index is in HEAD state, reset await execute( 'git reset --hard', `${action.workspace}/${worktreedir}`, action.silent ) + if (!action.singleCommit) { // New history isn't singleCommit, create empty initial commit await execute(