• 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: master
CHANGE BRANCH
x
Reset
Sync Branches
  • master
  • 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
  • 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
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
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
28714536590 master Fix filepath.Rel error wrap to include the actual error The glob loops in Local.Upload, Remote.Upload and findMatchedFiles wrapped the outer err (nil at that point) instead of the local e returned by filepath.Rel, so a rel failure would render %!... push 04 Jul 2026 05:49PM UTC umputun github
83.99
28714399250 master Add test for download-side directory glob exclusion Mirrors TestExecuter_UploadGlobExcludeDirectory for the download path: a glob download that excludes a matched directory must skip it rather than feed it into sftpDownload and fail. Pins the fin... push 04 Jul 2026 05:43PM UTC umputun github
83.99
28690570935 master Fix multiline wait swallowing errors, wire delete exclude through (#352) * Fix multiline wait swallowing errors, wire delete exclude through Previously, a multiline wait command that timed out was reported as successful when the remote temp-dir ... push 04 Jul 2026 01:22AM UTC web-flow github
83.99
28689990513 master Bump golang.org/x/crypto and golang.org/x/net Bumps golang.org/x/crypto v0.47.0 -> v0.53.0 and golang.org/x/net v0.49.0 -> v0.56.0 (vendored). govulncheck reported 9 vulnerabilities on live call paths, including an SSH panic (GO-2026-5013) and an... push 04 Jul 2026 01:00AM UTC umputun github
83.83
28688857844 master Fix only_on exclusion lists and bare address matching Previously, an only_on list containing only negated entries (e.g. only_on: [!host1]) skipped the command on every host: a non-excluded host matched no positive entry and fell through to the fi... push 04 Jul 2026 12:14AM UTC umputun github
84.05
24546068743 master Merge pull request #342 from umputun/dependabot/go_modules/go.opentelemetry.io/otel/sdk-1.43.0 chore(deps): bump go.opentelemetry.io/otel/sdk from 1.40.0 to 1.43.0 push 17 Apr 2026 03:27AM UTC web-flow github
83.97
23994104810 master Merge pull request #341 from umputun/dependabot/go_modules/github.com/go-jose/go-jose/v4-4.1.4 chore(deps): bump github.com/go-jose/go-jose/v4 from 4.1.3 to 4.1.4 push 05 Apr 2026 04:22AM UTC web-flow github
83.97
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