From edc2fe4f2e658683169a6b534ed1bea9f4c2704b Mon Sep 17 00:00:00 2001 From: Matthias Pigulla Date: Sat, 13 Feb 2021 21:02:34 +0100 Subject: [PATCH] Support container-based workflows and Windows (#17) --- .github/workflows/demo.yml | 16 +++++++++++++++- dist/index.js | 20 ++++++++++++++++---- index.js | 20 ++++++++++++++++---- 3 files changed, 47 insertions(+), 9 deletions(-) diff --git a/.github/workflows/demo.yml b/.github/workflows/demo.yml index 5fb24b6..2b34888 100644 --- a/.github/workflows/demo.yml +++ b/.github/workflows/demo.yml @@ -4,7 +4,7 @@ jobs: single_key_demo: strategy: matrix: - os: [ubuntu-latest, macOS-latest] + os: [ubuntu-latest, macOS-latest, windows-latest] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v1 @@ -26,3 +26,17 @@ jobs: uses: ./ with: ssh-private-key: ${{ secrets.DEMO_KEY }} + + docker_demo: + runs-on: ubuntu-latest + container: + image: ubuntu:latest + steps: + - uses: actions/checkout@v1 + - run: apt update && apt install -y openssh-client + - name: Setup key + uses: ./ + with: + ssh-private-key: | + ${{ secrets.DEMO_KEY }} + ${{ secrets.DEMO_KEY_2 }} diff --git a/dist/index.js b/dist/index.js index 173d8ea..e90c339 100644 --- a/dist/index.js +++ b/dist/index.js @@ -118,12 +118,9 @@ exports.issueCommand = issueCommand; const core = __webpack_require__(470); const child_process = __webpack_require__(129); const fs = __webpack_require__(747); +const os = __webpack_require__(87); try { - - const home = process.env['HOME']; - const homeSsh = home + '/.ssh'; - const privateKey = core.getInput('ssh-private-key'); if (!privateKey) { @@ -132,6 +129,21 @@ try { return; } + var home; + + if (process.env['OS'] == 'Windows_NT') { + console.log('Preparing ssh-agent service on Windows'); + child_process.execSync('sc config ssh-agent start=demand', { stdio: 'inherit' }); + + home = os.homedir(); + } else { + // Use getent() system call, since this is what ssh does; makes a difference in Docker-based + // Action runs, where $HOME is different from the pwent + var { homedir: home } = os.userInfo(); + } + + const homeSsh = home + '/.ssh'; + console.log(`Adding GitHub.com keys to ${homeSsh}/known_hosts`); fs.mkdirSync(homeSsh, { recursive: true }); fs.appendFileSync(`${homeSsh}/known_hosts`, '\ngithub.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==\n'); diff --git a/index.js b/index.js index 7ee6fe7..c4f5049 100644 --- a/index.js +++ b/index.js @@ -1,12 +1,9 @@ const core = require('@actions/core'); const child_process = require('child_process'); const fs = require('fs'); +const os = require('os'); try { - - const home = process.env['HOME']; - const homeSsh = home + '/.ssh'; - const privateKey = core.getInput('ssh-private-key'); if (!privateKey) { @@ -15,6 +12,21 @@ try { return; } + var home; + + if (process.env['OS'] == 'Windows_NT') { + console.log('Preparing ssh-agent service on Windows'); + child_process.execSync('sc config ssh-agent start=demand', { stdio: 'inherit' }); + + home = os.homedir(); + } else { + // Use getent() system call, since this is what ssh does; makes a difference in Docker-based + // Action runs, where $HOME is different from the pwent + var { homedir: home } = os.userInfo(); + } + + const homeSsh = home + '/.ssh'; + console.log(`Adding GitHub.com keys to ${homeSsh}/known_hosts`); fs.mkdirSync(homeSsh, { recursive: true }); fs.appendFileSync(`${homeSsh}/known_hosts`, '\ngithub.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==\n');