• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

umputun / spot
84%

Build:
DEFAULT BRANCH: master
Repo Added 01 May 2023 10:40PM UTC
Token fKmP3eE00CORXdCzaKDWoCzm5XFlwui2k regen
Build 956 Last
Files 19
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

LAST BUILD ON BRANCH master
branch: SELECT
CHANGE BRANCH
x
Sync Branches
  • No branch selected
  • SPOT_TIMEOUT
  • add-ansible-vault-secrets
  • add-json-schema
  • add-shell-completions
  • add_option_forward_agent
  • allow_user_in_target_address
  • chmod-x
  • ci/workflow-hardening
  • cmd_unmarshal
  • command_condition
  • cusom_shell
  • custom-tmp
  • custom_shell
  • custom_vars
  • dependabot
  • dependabot/github_actions/github-actions-updates-5714300483
  • dependabot/github_actions/github-actions-updates-acdff8b645
  • dependabot/github_actions/github-actions-updates-afd9e15987
  • dependabot/github_actions/github-actions-updates-fcf4e41b5c
  • dependabot/go_modules/filippo.io/edwards25519-1.1.1
  • dependabot/go_modules/github.com/aws/aws-sdk-go-v2/config-1.29.14
  • dependabot/go_modules/github.com/aws/aws-sdk-go-v2/config-1.29.15
  • dependabot/go_modules/github.com/aws/aws-sdk-go-v2/config-1.29.16
  • dependabot/go_modules/github.com/aws/aws-sdk-go-v2/config-1.29.17
  • dependabot/go_modules/github.com/aws/aws-sdk-go-v2/credentials-1.17.67
  • dependabot/go_modules/github.com/aws/aws-sdk-go-v2/credentials-1.17.68
  • dependabot/go_modules/github.com/aws/aws-sdk-go-v2/credentials-1.17.69
  • dependabot/go_modules/github.com/aws/aws-sdk-go-v2/credentials-1.17.70
  • dependabot/go_modules/github.com/aws/aws-sdk-go-v2/service/secretsmanager-1.35.4
  • dependabot/go_modules/github.com/aws/aws-sdk-go-v2/service/secretsmanager-1.35.5
  • dependabot/go_modules/github.com/aws/aws-sdk-go-v2/service/secretsmanager-1.35.6
  • dependabot/go_modules/github.com/aws/aws-sdk-go-v2/service/secretsmanager-1.35.7
  • dependabot/go_modules/github.com/containerd/containerd-1.7.11
  • dependabot/go_modules/github.com/containerd/containerd-1.7.27
  • dependabot/go_modules/github.com/docker/docker-24.0.7incompatible
  • dependabot/go_modules/github.com/docker/docker-24.0.9incompatible
  • dependabot/go_modules/github.com/docker/docker-26.1.4incompatible
  • dependabot/go_modules/github.com/docker/docker-26.1.5incompatible
  • dependabot/go_modules/github.com/go-jose/go-jose/v3-3.0.1
  • dependabot/go_modules/github.com/go-jose/go-jose/v3-3.0.3
  • dependabot/go_modules/github.com/go-jose/go-jose/v4-4.1.4
  • dependabot/go_modules/github.com/go-pkgz/fileutils-0.4.0
  • dependabot/go_modules/github.com/go-pkgz/lgr-0.12.0
  • dependabot/go_modules/github.com/go-pkgz/lgr-0.12.1
  • dependabot/go_modules/github.com/go-sql-driver/mysql-1.9.2
  • dependabot/go_modules/github.com/go-sql-driver/mysql-1.9.3
  • dependabot/go_modules/github.com/hashicorp/go-retryablehttp-0.7.7
  • dependabot/go_modules/github.com/hashicorp/vault/api-1.20.0
  • dependabot/go_modules/github.com/opencontainers/runc-1.1.12
  • dependabot/go_modules/github.com/pelletier/go-toml/v2-2.2.4
  • dependabot/go_modules/github.com/pkg/sftp-1.13.9
  • dependabot/go_modules/github.com/testcontainers/testcontainers-go-0.36.0
  • dependabot/go_modules/github.com/testcontainers/testcontainers-go-0.37.0
  • dependabot/go_modules/go-modules-updates-0b1b715552
  • dependabot/go_modules/go-modules-updates-38676b66b8
  • dependabot/go_modules/go-modules-updates-4132416c07
  • dependabot/go_modules/go-modules-updates-7f184a08d6
  • dependabot/go_modules/go-modules-updates-8f1b82aee4
  • dependabot/go_modules/go-modules-updates-bbb8b02913
  • dependabot/go_modules/go-modules-updates-cd95fe73d3
  • dependabot/go_modules/go-modules-updates-df02f00acb
  • dependabot/go_modules/go-modules-updates-f0b1c50809
  • dependabot/go_modules/go.opentelemetry.io/otel/sdk-1.40.0
  • dependabot/go_modules/go.opentelemetry.io/otel/sdk-1.43.0
  • dependabot/go_modules/golang.org/x/crypto-0.17.0
  • dependabot/go_modules/golang.org/x/crypto-0.31.0
  • dependabot/go_modules/golang.org/x/crypto-0.37.0
  • dependabot/go_modules/golang.org/x/crypto-0.38.0
  • dependabot/go_modules/golang.org/x/crypto-0.39.0
  • dependabot/go_modules/golang.org/x/crypto-0.45.0
  • dependabot/go_modules/golang.org/x/net-0.17.0
  • dependabot/go_modules/golang.org/x/net-0.23.0
  • dependabot/go_modules/golang.org/x/net-0.36.0
  • dependabot/go_modules/golang.org/x/net-0.55.0
  • dependabot/go_modules/google.golang.org/grpc-1.57.1
  • dependabot/go_modules/google.golang.org/protobuf-1.33.0
  • disable-colors
  • doc-yaml-multiline
  • dry_run
  • dynamic-register-vars
  • dynamic_targets
  • echo-condition
  • echo_command
  • enfoce-unix-slash
  • env_file
  • env_locality
  • exclude-support-for-delete-copy
  • exec_options
  • expand-os-env
  • feat-sudo-password-support
  • feat/task-import
  • feat/template-command
  • feature/line-command-251
  • feature/reverse-copy-download
  • fix
  • fix-custom-shell
  • fix-env-var-expansion
  • fix-missing-hostname
  • fix-secrets-masking
  • fix-simplified-example
  • fix-single-export
  • fix-single-quoted-vars
  • fix-skip-short-flag
  • fix-ssh-agent-override
  • fix-temp-leftovers
  • fix/config-parsing
  • fix/defensive-guards
  • fix/docs-ci-hygiene
  • fix/executor-correctness
  • fix/line-append-sudo-permission
  • fix/only-on-matching
  • fix/rel-error-wrap
  • fix/review-top-findings
  • fix/wait-delete-exclude
  • fixes-issue-313
  • gen_template
  • glob_support
  • help
  • hide-secrets
  • if/fix-typo-docs
  • invert_condition
  • linux_separator
  • local-dry
  • local-mode
  • local-shell
  • log_script
  • main
  • maintenance/deps-and-linter-update
  • master
  • match-regex
  • mode_copy_check
  • multi_copy
  • multi_delete
  • multi_sync
  • multiple-task-cli-option
  • no_default_key
  • on_exit
  • onerror_extras
  • onerror_vars
  • only_on
  • others_env
  • paskal/dependabot-security-updates
  • patch-1
  • playbook
  • rand_tmp
  • redundant-code2
  • refactot_main
  • refs/tags/1.10.1
  • refs/tags/v0.10.0
  • refs/tags/v0.11.0
  • refs/tags/v0.11.1
  • refs/tags/v0.11.2
  • refs/tags/v0.11.3
  • refs/tags/v0.12.0
  • refs/tags/v0.12.1
  • refs/tags/v0.12.2
  • refs/tags/v0.13.0
  • refs/tags/v0.13.1
  • refs/tags/v0.14.0
  • refs/tags/v0.14.1
  • refs/tags/v0.14.2
  • refs/tags/v0.14.3
  • refs/tags/v0.14.4
  • refs/tags/v0.14.5
  • refs/tags/v0.14.6
  • refs/tags/v0.15.0
  • refs/tags/v0.15.1
  • refs/tags/v0.15.2
  • refs/tags/v0.15.3
  • refs/tags/v0.15.4
  • refs/tags/v0.15.5
  • refs/tags/v0.15.6
  • refs/tags/v0.8.0
  • refs/tags/v0.8.1
  • refs/tags/v0.8.2
  • refs/tags/v0.8.3
  • refs/tags/v0.9.0
  • refs/tags/v0.9.1
  • refs/tags/v1.0.0
  • refs/tags/v1.1.0
  • refs/tags/v1.1.1
  • refs/tags/v1.10.0
  • refs/tags/v1.10.1
  • refs/tags/v1.11.0
  • refs/tags/v1.11.2
  • refs/tags/v1.11.3
  • refs/tags/v1.11.4
  • refs/tags/v1.11.5
  • refs/tags/v1.12.0
  • refs/tags/v1.12.1
  • refs/tags/v1.13.0
  • refs/tags/v1.13.1
  • refs/tags/v1.14.0
  • refs/tags/v1.14.1
  • refs/tags/v1.15.0
  • refs/tags/v1.15.1
  • refs/tags/v1.16.0
  • refs/tags/v1.16.1
  • refs/tags/v1.16.2
  • refs/tags/v1.16.3
  • refs/tags/v1.16.4
  • refs/tags/v1.17.0
  • refs/tags/v1.17.1
  • refs/tags/v1.17.2
  • refs/tags/v1.18.0
  • refs/tags/v1.19.0
  • refs/tags/v1.19.1
  • refs/tags/v1.19.2
  • refs/tags/v1.19.3
  • refs/tags/v1.2.0
  • refs/tags/v1.3.0
  • refs/tags/v1.4.0
  • refs/tags/v1.4.1
  • refs/tags/v1.5.0
  • refs/tags/v1.6.0
  • refs/tags/v1.6.1
  • refs/tags/v1.6.2
  • refs/tags/v1.6.3
  • refs/tags/v1.6.4
  • refs/tags/v1.6.5
  • refs/tags/v1.7.0
  • refs/tags/v1.8.0
  • refs/tags/v1.8.1
  • refs/tags/v1.9.0
  • refs/tags/v1.9.1
  • refs/tags/v1.9.2
  • register-across-tasks
  • register-vars
  • remote-addr-vars
  • safe-script
  • script_orig
  • secrets_provider
  • simple_playbook
  • simple_playbook_no_inventory
  • single_target
  • site-improvements
  • ssh_agent
  • strict_yaml_parser
  • sudo
  • sudo-cond-fixes
  • sudo_copy
  • sudo_dbl_shell
  • sync_exclude
  • sync_remove_dirs
  • tags
  • target_names_type
  • targets_refactor
  • task-secret
  • task-tagging-support
  • task-user-fix
  • task_hosts
  • test-empty-groups-handling
  • test/download-dir-exclude
  • toml
  • update-dependencies
  • upgrade-go-1.24
  • vebrose-levels

06 Jul 2026 07:52AM UTC coverage: 84.034% (-0.1%) from 84.168%
28776367930

push

github

umputun
executor: fix context-cancellation leaks, local copy bugs, drop dead options

- sshRun: buffer the done channel so the command goroutine can exit
  after a ctx-cancel return instead of blocking forever (goroutine leak).
- sftpUpload/sftpDownload: build the sftp client over an ssh session we
  hold (newSftpSession), and on ctx-cancel close that session to abort
  the in-flight transfer from outside the sftp mutex, then drain the copy
  goroutine before returning. newSftpSession drains the session stderr
  pipe in a goroutine (RequestSubsystem never starts the copy that
  Session.Stderr would use, so unread stderr would stall the channel).
  The cancel drain is bounded by a grace timeout so an app-level wedge
  cannot hang the deploy; a transport-level wedge is left to a follow-up.
- sftpDownload now downloads into a temp file in the destination dir and
  renames over the destination only on success, so a canceled or failed
  download no longer truncates or destroys an existing local file (newly
  reachable now that a download actually aborts mid-copy).
- Local.Upload: multi-file glob + mkdir creates the destination directory
  itself, and honors context cancellation between files.
- Local.Download: pass the caller context through.
- Connector.String: cap the private-key slice with min().
- Remove dead options never read by any executor: Checksum from
  UpDownOpts and SyncOpts, and Force from SyncOpts, plus the config
  sync 'force' field (undocumented no-op) and its schema entry. Behavior
  change: under strict YAML a playbook that set 'sync: {force: true}'
  will now fail to parse.

87 of 117 new or added lines in 4 files covered. (74.36%)

26 existing lines in 2 files now uncovered.

3279 of 3902 relevant lines covered (84.03%)

59.29 hits per line

Relevant lines Covered
Build:
Build:
3902 RELEVANT LINES 3279 COVERED LINES
59.29 HITS PER LINE
Source Files on master
  • Tree
  • List 19
  • Changed 7
  • Source Changed 0
  • Coverage Changed 7
Coverage ∆ File Lines Relevant Covered Missed Hits/Line

Recent builds

Builds Branch Commit Type Ran Committer Via Coverage
28776367930 master executor: fix context-cancellation leaks, local copy bugs, drop dead options - sshRun: buffer the done channel so the command goroutine can exit after a ctx-cancel return instead of blocking forever (goroutine leak). - sftpUpload/sftpDownload: ... push 06 Jul 2026 07:55AM UTC umputun github
84.03
28776180924 fix/executor-correctness executor: fix context-cancellation leaks, local copy bugs, drop dead options - sshRun: buffer the done channel so the command goroutine can exit after a ctx-cancel return instead of blocking forever (goroutine leak). - sftpUpload/sftpDownload: ... Pull #358 06 Jul 2026 07:51AM UTC paskal github
84.03
28776070880 fix/executor-correctness executor: fix context-cancellation leaks, local copy bugs, drop dead options - sshRun: buffer the done channel so the command goroutine can exit after a ctx-cancel return instead of blocking forever (goroutine leak). - sftpUpload/sftpDownload: ... Pull #358 06 Jul 2026 07:49AM UTC paskal github
84.1
28772153844 feat/task-import refactor(config): simplify import resolution code Pull #359 06 Jul 2026 06:35AM UTC robertobarreda github
84.36
28757660161 fix/executor-correctness executor: fix context-cancellation leaks, local copy bugs, drop dead options - sshRun: buffer the done channel so the command goroutine can exit after a ctx-cancel return instead of blocking forever (goroutine leak). - sftpUpload/sftpDownload: ... Pull #358 05 Jul 2026 10:54PM UTC paskal github
83.88
28756797116 master config: fix inline comment stripping and simplified-playbook options - scriptCommand stripped a single-line script from the first '#' anywhere, which mangled '#' inside a token (e.g. ${VAR#prefix}) or inside a quoted string (e.g. "fix #1"). I... push 05 Jul 2026 10:20PM UTC umputun github
84.17
28754959250 fix/defensive-guards guards: decrypt length check, ssh user nil guard, command count across hosts - decrypt now rejects ciphertext shorter than the 24-byte nonce plus 16-byte salt with an error instead of panicking on the slice. - sshUser had an inverted nil guard:... Pull #357 05 Jul 2026 09:10PM UTC paskal github
84.06
28754880190 fix/executor-correctness executor: fix context-cancellation leaks, local copy bugs, drop dead options - sshRun: buffer the done channel so the command goroutine can exit after a ctx-cancel return instead of blocking forever (goroutine leak). - sftpUpload/sftpDownload: ... Pull #358 05 Jul 2026 09:07PM UTC paskal github
83.78
28754880978 fix/config-parsing config: fix inline comment stripping and simplified-playbook options - scriptCommand stripped a single-line script from the first '#' anywhere, which mangled '#' inside a token (e.g. ${VAR#prefix}) or inside a quoted string (e.g. "fix #1"). I... Pull #355 05 Jul 2026 09:07PM UTC paskal github
84.17
28750757113 master docs, schema and build/ci hygiene fixes - README: drop the non-existent --local-shell / SPOT_LOCAL_SHELL flag (local shell is a playbook field only), correct the --temp env var name from SPOT_TEMP_DIR to SPOT_TEMP, and fix the delete example ... push 05 Jul 2026 06:35PM UTC umputun github
83.99
See All Builds (885)
  • Settings
  • Repo on GitHub
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc