mirror of
				https://github.com/easingthemes/ssh-deploy.git
				synced 2025-10-30 23:30:09 +08:00 
			
		
		
		
	Merge pull request #95 from easingthemes/feature/multi-src
feat: Add multi source and multi target support
This commit is contained in:
		
						commit
						923bc68f1a
					
				
							
								
								
									
										104
									
								
								.github/workflows/e2e-manual.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								.github/workflows/e2e-manual.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,104 @@ | |||||||
|  | name: e2e Manual Test | ||||||
|  | 
 | ||||||
|  | on: | ||||||
|  |   workflow_dispatch: | ||||||
|  |     inputs: | ||||||
|  |       ARGS: | ||||||
|  |         description: 'ARGS' | ||||||
|  |         required: true | ||||||
|  |         default: '-rltgoDzvO --delete --chmod=ugo+rwX --progress' | ||||||
|  |       EXCLUDE: | ||||||
|  |         description: 'EXCLUDE' | ||||||
|  |         required: true | ||||||
|  |         default: 'skip_dir/, /node_modules/' | ||||||
|  |       SSH_CMD_ARGS: | ||||||
|  |         description: 'SSH_CMD_ARGS' | ||||||
|  |         required: true | ||||||
|  |         default: '-o StrictHostKeyChecking=no, -o UserKnownHostsFile=/dev/null' | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | env: | ||||||
|  |   TEST_HOST_DOCKER: ./test | ||||||
|  |   TEST_USER: test | ||||||
|  | 
 | ||||||
|  | jobs: | ||||||
|  |   e2e-manual: | ||||||
|  |     runs-on: ubuntu-latest | ||||||
|  | 
 | ||||||
|  |     steps: | ||||||
|  |       - name: Checkout | ||||||
|  |         uses: actions/checkout@v3 | ||||||
|  | 
 | ||||||
|  | #         ---------------------------------------------------------------- | ||||||
|  | #         START E2E Test Specific - steps | ||||||
|  | #         ---------------------------------------------------------------- | ||||||
|  | 
 | ||||||
|  |       - name: E2E Test Specific - Clean up old test files | ||||||
|  |         run: | | ||||||
|  |           docker stop ssh-host-container || true && docker rm ssh-host-container || true | ||||||
|  | 
 | ||||||
|  |       - name: E2E Test Specific - Create ssh keys | ||||||
|  |         run: | | ||||||
|  |           echo $HOME | ||||||
|  |           ls -la $HOME | ||||||
|  |           ssh-keygen -m PEM -t rsa -b 4096 -f "$HOME/.ssh/id_rsa" -N "" | ||||||
|  |           eval `ssh-agent -s` | ||||||
|  |           ssh-add "$HOME/.ssh/id_rsa" | ||||||
|  |           ssh-add -l | ||||||
|  |           echo "SSH_PRIVATE_KEY<<EOF" >> $GITHUB_ENV | ||||||
|  |           cat $HOME/.ssh/id_rsa >> $GITHUB_ENV | ||||||
|  |           echo "EOF" >> $GITHUB_ENV | ||||||
|  | 
 | ||||||
|  |       - name: E2E Test Specific - Build Host Server Image | ||||||
|  |         working-directory: ${{ env.TEST_HOST_DOCKER }} | ||||||
|  |         run: | | ||||||
|  |           docker build \ | ||||||
|  |             -t ssh-host-image . \ | ||||||
|  |             --build-arg SSH_PUB_KEY="$(cat $HOME/.ssh/id_rsa.pub)" | ||||||
|  |           docker run -d -p 8822:22 --name=ssh-host-container ssh-host-image | ||||||
|  |           docker exec ssh-host-container sh -c "hostname --ip-address" > ip.txt | ||||||
|  |           echo "REMOTE_HOST<<EOF" >> $GITHUB_ENV | ||||||
|  |           cat ip.txt >> $GITHUB_ENV | ||||||
|  |           echo "EOF" >> $GITHUB_ENV | ||||||
|  |         shell: bash | ||||||
|  | 
 | ||||||
|  |       - name: E2E Test Specific - Create project file | ||||||
|  |         run: | | ||||||
|  |           mkdir test_project2 && cd "$_" | ||||||
|  |           truncate -s 5MB info2.txt | ||||||
|  |           cd ../ | ||||||
|  |           mkdir test_project && cd "$_" | ||||||
|  |           touch index.html | ||||||
|  |           date +"%Y-%m-%d %H:%M:%S,%3N" >> index.html | ||||||
|  |           truncate -s 50MB image.svg | ||||||
|  |           truncate -s 5MB info.txt | ||||||
|  |           truncate -s 500MB big_file.txt | ||||||
|  |           mkdir skip_dir && cd "$_" | ||||||
|  |           truncate -s 5MB text_in_skip_dir.txt | ||||||
|  |           cd ../ | ||||||
|  |           cat index.html | ||||||
|  |           echo "test_project:" && ls -lR | ||||||
|  |           echo "skip_dir:" && ls -lR skip_dir | ||||||
|  | 
 | ||||||
|  | #         ---------------------------------------------------------------- | ||||||
|  | #         END E2E Test Specific - steps | ||||||
|  | #         ---------------------------------------------------------------- | ||||||
|  | 
 | ||||||
|  |       - name: e2e Test ssh-deploy action | ||||||
|  |         uses: easingthemes/ssh-deploy@feature/multi-src | ||||||
|  |         env: | ||||||
|  |           # ENV Vars created in previous steps: | ||||||
|  |           # SSH_PRIVATE_KEY: $EXAMPLE_SSH_PRIVATE_KEY | ||||||
|  |           # REMOTE_HOST: $EXAMPLE_REMOTE_HOST | ||||||
|  |           REMOTE_USER: ${{ env.TEST_USER }} | ||||||
|  |           ARGS: ${{ github.event.inputs.ARGS }} | ||||||
|  |           SSH_CMD_ARGS: ${{ github.event.inputs.SSH_CMD_ARGS }} | ||||||
|  |           SOURCE: test_project/ test_project2/ | ||||||
|  |           TARGET: /var/www/html/ | ||||||
|  |           EXCLUDE: ${{ github.event.inputs.EXCLUDE }} | ||||||
|  |           SCRIPT_BEFORE: | | ||||||
|  |             whoami | ||||||
|  |             ls -lR /var/www/html/ | ||||||
|  |           SCRIPT_AFTER: | | ||||||
|  |             ls -lR /var/www/html/ | ||||||
|  |             echo $RSYNC_STDOUT | ||||||
							
								
								
									
										86
									
								
								.github/workflows/e2e.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										86
									
								
								.github/workflows/e2e.yml
									
									
									
									
										vendored
									
									
								
							| @ -2,26 +2,12 @@ name: e2e Test | |||||||
| 
 | 
 | ||||||
| on: | on: | ||||||
|   push: |   push: | ||||||
|     branches: [ 'main' ] |     branches: [ 'feature/multi-src' ] | ||||||
|   workflow_dispatch: |  | ||||||
|     inputs: |  | ||||||
|       ARGS: |  | ||||||
|         description: 'ARGS' |  | ||||||
|         required: true |  | ||||||
|         default: '-rltgoDzvO --delete --chmod=ugo=rwX --progress' |  | ||||||
|       EXCLUDE: |  | ||||||
|         description: 'EXCLUDE' |  | ||||||
|         required: true |  | ||||||
|         default: 'skip_dir/, /node_modules/' |  | ||||||
|       SSH_CMD_ARGS: |  | ||||||
|         description: 'SSH_CMD_ARGS' |  | ||||||
|         required: true |  | ||||||
|         default: '-o StrictHostKeyChecking=no, -o UserKnownHostsFile=/dev/null' |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
| env: | env: | ||||||
|   TEST_HOST_DOCKER: ./test |   TEST_HOST_DOCKER: ./test | ||||||
|   TEST_USER: test |   TEST_USER: test | ||||||
|  |   TEST_USER2: test2 | ||||||
| 
 | 
 | ||||||
| jobs: | jobs: | ||||||
|   e2e: |   e2e: | ||||||
| @ -31,11 +17,15 @@ jobs: | |||||||
|       - name: Checkout |       - name: Checkout | ||||||
|         uses: actions/checkout@v3 |         uses: actions/checkout@v3 | ||||||
| 
 | 
 | ||||||
|       - name: Clean up old test files | #         : --------------------------------------------------------------- | ||||||
|  | #         : START E2E Test Specific - steps | ||||||
|  | #         : ---------------------------------------------------------------- | ||||||
|  | 
 | ||||||
|  |       - name: E2E Test Specific - Clean up old test files | ||||||
|         run: | |         run: | | ||||||
|           docker stop ssh-host-container || true && docker rm ssh-host-container || true |           docker stop ssh-host-container || true && docker rm ssh-host-container || true | ||||||
| 
 | 
 | ||||||
|       - name: Create ssh keys |       - name: E2E Test Specific - Create ssh keys | ||||||
|         run: | |         run: | | ||||||
|           echo $HOME |           echo $HOME | ||||||
|           ls -la $HOME |           ls -la $HOME | ||||||
| @ -47,13 +37,12 @@ jobs: | |||||||
|           cat $HOME/.ssh/id_rsa >> $GITHUB_ENV |           cat $HOME/.ssh/id_rsa >> $GITHUB_ENV | ||||||
|           echo "EOF" >> $GITHUB_ENV |           echo "EOF" >> $GITHUB_ENV | ||||||
| 
 | 
 | ||||||
|       - name: Build Host Server Image |       - name: E2E Test Specific - Build Host Server Image | ||||||
|         working-directory: ${{ env.TEST_HOST_DOCKER }} |         working-directory: ${{ env.TEST_HOST_DOCKER }} | ||||||
|         run: | |         run: | | ||||||
|           docker build \ |           docker build \ | ||||||
|             -t ssh-host-image . \ |             -t ssh-host-image . \ | ||||||
|             --build-arg SSH_PUB_KEY="$(cat $HOME/.ssh/id_rsa.pub)" \ |             --build-arg SSH_PUB_KEY="$(cat $HOME/.ssh/id_rsa.pub)" | ||||||
|             --build-arg ssh_user="${{ env.TEST_USER }}" |  | ||||||
|           docker run -d -p 8822:22 --name=ssh-host-container ssh-host-image |           docker run -d -p 8822:22 --name=ssh-host-container ssh-host-image | ||||||
|           docker exec ssh-host-container sh -c "hostname --ip-address" > ip.txt |           docker exec ssh-host-container sh -c "hostname --ip-address" > ip.txt | ||||||
|           echo "REMOTE_HOST<<EOF" >> $GITHUB_ENV |           echo "REMOTE_HOST<<EOF" >> $GITHUB_ENV | ||||||
| @ -61,8 +50,11 @@ jobs: | |||||||
|           echo "EOF" >> $GITHUB_ENV |           echo "EOF" >> $GITHUB_ENV | ||||||
|         shell: bash |         shell: bash | ||||||
| 
 | 
 | ||||||
|       - name: Create project file |       - name: E2E Test Specific - Create project file | ||||||
|         run: | |         run: | | ||||||
|  |           mkdir test_project2 && cd "$_" | ||||||
|  |           truncate -s 5MB info2.txt | ||||||
|  |           cd ../ | ||||||
|           mkdir test_project && cd "$_" |           mkdir test_project && cd "$_" | ||||||
|           touch index.html |           touch index.html | ||||||
|           date +"%Y-%m-%d %H:%M:%S,%3N" >> index.html |           date +"%Y-%m-%d %H:%M:%S,%3N" >> index.html | ||||||
| @ -73,24 +65,38 @@ jobs: | |||||||
|           truncate -s 5MB text_in_skip_dir.txt |           truncate -s 5MB text_in_skip_dir.txt | ||||||
|           cd ../ |           cd ../ | ||||||
|           cat index.html |           cat index.html | ||||||
|           echo "test_project:" && ls -l |           echo "test_project:" && ls -lR | ||||||
|           echo "skip_dir:" && ls -l skip_dir |           echo "skip_dir:" && ls -lR skip_dir | ||||||
| 
 | 
 | ||||||
|       - name: e2e Test published ssh-deploy action | #         ---------------------------------------------------------------- | ||||||
|         uses: easingthemes/ssh-deploy@main | #         END E2E Test Specific - steps | ||||||
|  | #         ---------------------------------------------------------------- | ||||||
|  | 
 | ||||||
|  |       - name: set shared ENV variables for multi target deployment | ||||||
|  |         run: | | ||||||
|  |           echo "ARGS=-rltgoDzvOR --delete --chmod=ugo+rwX --progress" >> $GITHUB_ENV | ||||||
|  |           echo "SSH_CMD_ARGS=-o StrictHostKeyChecking=no, -o UserKnownHostsFile=/dev/null" >> $GITHUB_ENV | ||||||
|  |           echo "SOURCE=test_project/ test_project2/" >> $GITHUB_ENV | ||||||
|  |           echo "EXCLUDE=skip_dir/, /node_modules/" >> $GITHUB_ENV | ||||||
|  |           echo "SCRIPT_BEFORE<<EOF" >> $GITHUB_ENV | ||||||
|  |           echo "whoami" >> $GITHUB_ENV | ||||||
|  |           echo "ls -lR /var/www/html/" >> $GITHUB_ENV | ||||||
|  |           echo "EOF" >> $GITHUB_ENV | ||||||
|  |           echo "SCRIPT_AFTER<<EOF" >> $GITHUB_ENV | ||||||
|  |           echo $RSYNC_STDOUT >> $GITHUB_ENV | ||||||
|  |           echo "ls -lR /var/www/html/" >> $GITHUB_ENV | ||||||
|  |           echo "EOF" >> $GITHUB_ENV | ||||||
|  | 
 | ||||||
|  |       - name: e2e Test ssh-deploy action - Target 1 | ||||||
|  |         uses: easingthemes/ssh-deploy@feature/multi-src | ||||||
|         env: |         env: | ||||||
|           # ENV Vars created in previous steps: |           # Shared ENV Vars created in previous steps | ||||||
|           # SSH_PRIVATE_KEY: $EXAMPLE_SSH_PRIVATE_KEY |  | ||||||
|           # REMOTE_HOST: $EXAMPLE_REMOTE_HOST |  | ||||||
|           REMOTE_USER: ${{ env.TEST_USER }} |           REMOTE_USER: ${{ env.TEST_USER }} | ||||||
|           ARGS: ${{ github.event.inputs.ARGS || '-rltgoDzvO --delete --chmod=ugo=rwX --progress' }} |           TARGET: /var/www/html/${{ env.TEST_USER }} | ||||||
|           SSH_CMD_ARGS: ${{ github.event.inputs.SSH_CMD_ARGS || '-o StrictHostKeyChecking=no, -o UserKnownHostsFile=/dev/null' }} | 
 | ||||||
|           SOURCE: "test_project/" |       - name: e2e Test ssh-deploy action - Target 2 | ||||||
|           TARGET: "/var/www/html/" |         uses: easingthemes/ssh-deploy@feature/multi-src | ||||||
|           EXCLUDE: ${{ github.event.inputs.EXCLUDE || 'skip_dir/, /node_modules/' }} |         env: | ||||||
|           SCRIPT_BEFORE: | |           # Shared ENV Vars created in previous steps | ||||||
|             whoami |           REMOTE_USER: ${{ env.TEST_USER2 }} | ||||||
|             ls -al /var/www/html/ |           TARGET: /var/www/html/${{ env.TEST_USER2 }} | ||||||
|           SCRIPT_AFTER: | |  | ||||||
|             ls -al /var/www/html/ |  | ||||||
|             echo $RSYNC_STDOUT |  | ||||||
|  | |||||||
							
								
								
									
										71
									
								
								.github/workflows/manual-release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										71
									
								
								.github/workflows/manual-release.yml
									
									
									
									
										vendored
									
									
								
							| @ -2,43 +2,72 @@ name: Manual Release | |||||||
| on: | on: | ||||||
|   workflow_dispatch: |   workflow_dispatch: | ||||||
|     inputs: |     inputs: | ||||||
|       dryrun: |       version: | ||||||
|         description: 'DryRUn' |         description: 'Version' | ||||||
|  |         type: choice | ||||||
|         required: true |         required: true | ||||||
|         default: 'false' |         default: patch | ||||||
|  |         options: | ||||||
|  |           - patch | ||||||
|  |           - minor | ||||||
|  |           - major | ||||||
|  |       dryRun: | ||||||
|  |         description: 'DryRun' | ||||||
|  |         type: boolean | ||||||
|  |         default: true | ||||||
|  | # ENV and Config | ||||||
|  | env: | ||||||
|  |   GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||||||
|  |   NPM_TOKEN: ${{ secrets.NPM_TOKEN }} | ||||||
|  |   GIT_AUTHOR_NAME: github-actions | ||||||
|  |   GIT_AUTHOR_EMAIL: github-actions@github.com | ||||||
|  |   GIT_COMMITTER_NAME: github-actions | ||||||
|  |   GIT_COMMITTER_EMAIL: github-actions@github.com | ||||||
|  |   CI: true | ||||||
|  |   CONFIG_NODE_VERSION: '["lts/*"]' | ||||||
|  |   CONFIG_OS: '["ubuntu-latest"]' | ||||||
|  | # Main Job | ||||||
| jobs: | jobs: | ||||||
|   release: |   config: | ||||||
|     name: Test, Build and Release |     runs-on: ubuntu-latest | ||||||
|     runs-on: ${{ matrix.os }} |     outputs: | ||||||
|  |       NODE_VERSION: ${{ steps.set-config.outputs.CONFIG_NODE_VERSION }} | ||||||
|  |       OS: ${{ steps.set-config.outputs.CONFIG_OS }} | ||||||
|  |     steps: | ||||||
|  |       - id: set-config | ||||||
|  |         run: | | ||||||
|  |           echo "CONFIG_NODE_VERSION=${{ toJSON(env.CONFIG_NODE_VERSION) }}" >> $GITHUB_OUTPUT | ||||||
|  |           echo "CONFIG_OS=${{ toJSON(env.CONFIG_OS) }}" >> $GITHUB_OUTPUT | ||||||
|  |   release-manual: | ||||||
|  |     name: Test, Build and force Release | ||||||
|  |     needs: config | ||||||
|  | 
 | ||||||
|  |     runs-on: ${{ matrix.OS }} | ||||||
|     strategy: |     strategy: | ||||||
|       matrix: |       matrix: | ||||||
|         os: [ ubuntu-latest ] |         OS: ${{ fromJSON(needs.config.outputs.OS) }} | ||||||
|         node-version: [ 16.x ] |         NODE_VERSION: ${{ fromJSON(needs.config.outputs.NODE_VERSION) }} | ||||||
|  | 
 | ||||||
|     steps: |     steps: | ||||||
|       - name: Checkout |       - name: Checkout repo | ||||||
|         uses: actions/checkout@v3 |         uses: actions/checkout@v3 | ||||||
|       - name: Setup Node.js |       - name: Setup Node.js ${{ matrix.NODE_VERSION }} | ||||||
|         uses: actions/setup-node@v3 |         uses: actions/setup-node@v3 | ||||||
|         with: |         with: | ||||||
|           node-version: ${{ matrix['node-version'] }} |           node-version: ${{ matrix.NODE_VERSION }} | ||||||
|  |       - name: Commit trigger | ||||||
|  |         run: | | ||||||
|  |           git commit --allow-empty -m "${{ github.event.inputs.version }}: Trigger Manual Release" | ||||||
|       - name: Install dependencies |       - name: Install dependencies | ||||||
|         run: npm ci |         run: npm ci | ||||||
|       - name: Build Library |       - name: Build Library | ||||||
|         run: npm run build --if-present |         run: npm run build --if-present | ||||||
|       - name: Run Tests |       - name: Run Tests | ||||||
|         run: npm test --if-present |         run: npm test --if-present | ||||||
|       - name: Release |       - name: Publish npm package | ||||||
|         uses: cycjimmy/semantic-release-action@v3 |         uses: cycjimmy/semantic-release-action@v3 | ||||||
|         with: |         with: | ||||||
|           dry_run: ${{ github.event.inputs.dryrun == 'true' }} |           dry_run: ${{ github.event.inputs.dryRun == 'true' }} | ||||||
|           extra_plugins: | |           extra_plugins: | | ||||||
|             @semantic-release/changelog |             @semantic-release/changelog | ||||||
|             @semantic-release/git |             @semantic-release/git | ||||||
|         env: |  | ||||||
|           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |  | ||||||
|           NPM_TOKEN: ${{ secrets.NPM_TOKEN }} |  | ||||||
|           GIT_AUTHOR_NAME: github-actions |  | ||||||
|           GIT_AUTHOR_EMAIL: github-actions@github.com |  | ||||||
|           GIT_COMMITTER_NAME: github-actions |  | ||||||
|           GIT_COMMITTER_EMAIL: github-actions@github.com |  | ||||||
|           CI: true |  | ||||||
|  | |||||||
							
								
								
									
										11
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								README.md
									
									
									
									
									
								
							| @ -47,7 +47,8 @@ For any initial/required rsync flags, eg: `-avzr --delete` | |||||||
| 
 | 
 | ||||||
| ##### 6. `SOURCE` (optional, default '') | ##### 6. `SOURCE` (optional, default '') | ||||||
| 
 | 
 | ||||||
| The source directory, path relative to `$GITHUB_WORKSPACE` root, eg: `dist/` | The source directory, path relative to `$GITHUB_WORKSPACE` root, eg: `dist/`. | ||||||
|  | Multiple sources should be separated by space. | ||||||
| 
 | 
 | ||||||
| ##### 7. `TARGET` (optional, default '/home/REMOTE_USER/') | ##### 7. `TARGET` (optional, default '/home/REMOTE_USER/') | ||||||
| 
 | 
 | ||||||
| @ -148,6 +149,14 @@ Check actions tab for example. | |||||||
| 
 | 
 | ||||||
| More info for SSH keys: https://www.ssh.com/ssh/public-key-authentication | More info for SSH keys: https://www.ssh.com/ssh/public-key-authentication | ||||||
| 
 | 
 | ||||||
|  | ## Tips | ||||||
|  | 
 | ||||||
|  | - Optional ENV variables are created for simple requirements. | ||||||
|  | For complex use cases, use `ARGS` and `SSH_CMD_ARGS` to fully configure `rsync` with all possible options. | ||||||
|  | - If you need to use multiple steps, eg multi targets deployment, save shared ENV variables in `>> $GITHUB_ENV`. | ||||||
|  | Check .github/workflows/e2e.yml for an example | ||||||
|  | - For multi sources, use -R ARG to manipulate folders structure. | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| ## Disclaimer | ## Disclaimer | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @ -10,12 +10,12 @@ const githubWorkspace = process.env.GITHUB_WORKSPACE; | |||||||
| const remoteUser = process.env.REMOTE_USER; | const remoteUser = process.env.REMOTE_USER; | ||||||
| 
 | 
 | ||||||
| const defaultInputs = { | const defaultInputs = { | ||||||
|   source: '', |   source: './', | ||||||
|   target: `/home/${remoteUser}/`, |   target: `/home/${remoteUser}/`, | ||||||
|   exclude: '', |   exclude: '', | ||||||
|   args: '-rltgoDzvO', |   args: '-rltgoDzvO', | ||||||
|   sshCmdArgs: '-o StrictHostKeyChecking=no', |   sshCmdArgs: '-o StrictHostKeyChecking=no', | ||||||
|   deployKeyName: 'deploy_key' |   deployKeyName: `deploy_key_${remoteUser}_${Date.now()}` | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const inputs = { | const inputs = { | ||||||
| @ -30,10 +30,12 @@ inputNames.forEach((input) => { | |||||||
|   // eslint-disable-next-line default-case
 |   // eslint-disable-next-line default-case
 | ||||||
|   switch (inputName) { |   switch (inputName) { | ||||||
|     case 'source': |     case 'source': | ||||||
|       extendedVal = `${githubWorkspace}/${validVal}`; |       extendedVal = validVal.indexOf(' ') > -1 ? validVal.split(' ') : validVal; | ||||||
|  |       break; | ||||||
|  |     case 'args': | ||||||
|  |       extendedVal = validVal.split(' '); | ||||||
|       break; |       break; | ||||||
|     case 'exclude': |     case 'exclude': | ||||||
|     case 'args': |  | ||||||
|     case 'sshCmdArgs': |     case 'sshCmdArgs': | ||||||
|       extendedVal = validVal.split(',').map((item) => item.trim()); |       extendedVal = validVal.split(',').map((item) => item.trim()); | ||||||
|       break; |       break; | ||||||
|  | |||||||
| @ -17,7 +17,7 @@ const remoteCmd = async (content, privateKeyPath, isRequired, label) => new Prom | |||||||
|     writeToFile({ dir: githubWorkspace, filename, content }); |     writeToFile({ dir: githubWorkspace, filename, content }); | ||||||
|     console.log(`Executing remote script: ssh -i ${privateKeyPath} ${sshServer}`); |     console.log(`Executing remote script: ssh -i ${privateKeyPath} ${sshServer}`); | ||||||
|     exec( |     exec( | ||||||
|       `DEBIAN_FRONTEND=noninteractive ssh -i ${privateKeyPath} ${sshServer} 'RSYNC_STDOUT="${process.env.RSYNC_STDOUT}" bash -s' < ${filename}`, |       `DEBIAN_FRONTEND=noninteractive ssh -i ${privateKeyPath} -o StrictHostKeyChecking=no ${sshServer} 'RSYNC_STDOUT="${process.env.RSYNC_STDOUT}" bash -s' < ${filename}`, | ||||||
|       (err, data, stderr) => { |       (err, data, stderr) => { | ||||||
|         if (err) { |         if (err) { | ||||||
|           const message = `⚠️ [CMD] Remote script failed: ${err.message}`; |           const message = `⚠️ [CMD] Remote script failed: ${err.message}`; | ||||||
|  | |||||||
| @ -55,7 +55,7 @@ const rsyncCli = async ({ | |||||||
|   privateKeyPath, args, sshCmdArgs |   privateKeyPath, args, sshCmdArgs | ||||||
| }) => { | }) => { | ||||||
|   console.log(`[Rsync] Starting Rsync Action: ${source} to ${rsyncServer}`); |   console.log(`[Rsync] Starting Rsync Action: ${source} to ${rsyncServer}`); | ||||||
|   if (exclude) console.log(`[Rsync] excluding folders ${exclude}`); |   if (exclude && exclude.length > 0) console.log(`[Rsync] excluding folders ${exclude}`); | ||||||
| 
 | 
 | ||||||
|   const defaultOptions = { |   const defaultOptions = { | ||||||
|     ssh: true, |     ssh: true, | ||||||
|  | |||||||
| @ -6,23 +6,32 @@ RUN apt update | |||||||
| 
 | 
 | ||||||
| RUN apt install openssh-server rsync sudo -y | RUN apt install openssh-server rsync sudo -y | ||||||
| 
 | 
 | ||||||
| RUN useradd -rm -d /home/test -s /bin/bash -g root -G sudo -u 1000 test |  | ||||||
| 
 |  | ||||||
| RUN usermod -aG sudo test |  | ||||||
| 
 |  | ||||||
| RUN echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config.d/pub.conf | RUN echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config.d/pub.conf | ||||||
| RUN echo "AuthorizedKeysFile  .ssh/authorized_keys" >> /etc/ssh/sshd_config.d/pub.conf | RUN echo "AuthorizedKeysFile  .ssh/authorized_keys" >> /etc/ssh/sshd_config.d/pub.conf | ||||||
| 
 | 
 | ||||||
| RUN mkdir -p /var/www/html | RUN mkdir -p /var/www/html | ||||||
| RUN chown -R test /var/www/html | RUN mkdir -p /var/www/html/test | ||||||
|  | RUN mkdir -p /var/www/html/test2 | ||||||
|  | RUN chmod -R 775 /var/www/html | ||||||
|  | 
 | ||||||
|  | RUN useradd -rm -d /home/test -s /bin/bash -g root -G sudo -u 1000 test | ||||||
|  | RUN usermod -aG sudo test | ||||||
| RUN mkdir -p /home/test/.ssh | RUN mkdir -p /home/test/.ssh | ||||||
| RUN echo "$SSH_PUB_KEY" > /home/test/.ssh/authorized_keys | RUN echo "$SSH_PUB_KEY" > /home/test/.ssh/authorized_keys | ||||||
| RUN chmod 700 /home/test/.ssh | RUN chmod 700 /home/test/.ssh | ||||||
| RUN chown -R test /home/test/.ssh | RUN chown -R test /home/test/.ssh | ||||||
| 
 | 
 | ||||||
|  | RUN useradd -rm -d /home/test2 -s /bin/bash -g root -G sudo -u 1002 test2 | ||||||
|  | RUN usermod -aG sudo test2 | ||||||
|  | RUN mkdir -p /home/test2/.ssh | ||||||
|  | RUN echo "$SSH_PUB_KEY" > /home/test2/.ssh/authorized_keys | ||||||
|  | RUN chmod 700 /home/test2/.ssh | ||||||
|  | RUN chown -R test2 /home/test2/.ssh | ||||||
|  | 
 | ||||||
| RUN service ssh start | RUN service ssh start | ||||||
| 
 | 
 | ||||||
| RUN  echo 'test:test' | chpasswd | RUN  echo 'test:test' | chpasswd | ||||||
|  | RUN  echo 'test2:test2' | chpasswd | ||||||
| 
 | 
 | ||||||
| EXPOSE 22 | EXPOSE 22 | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Dragan Filipović
						Dragan Filipović