{"id":20811767,"url":"https://github.com/strider-cd/strider-remote-worker","last_synced_at":"2026-02-27T15:43:18.452Z","repository":{"id":51104764,"uuid":"11859667","full_name":"Strider-CD/strider-remote-worker","owner":"Strider-CD","description":"A worker for strider that delegates jobs over a network","archived":false,"fork":false,"pushed_at":"2017-02-03T23:24:14.000Z","size":11,"stargazers_count":2,"open_issues_count":3,"forks_count":3,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-02-21T20:39:23.566Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Strider-CD.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-08-03T07:22:46.000Z","updated_at":"2016-07-15T15:02:57.000Z","dependencies_parsed_at":"2022-08-19T21:51:21.392Z","dependency_job_id":null,"html_url":"https://github.com/Strider-CD/strider-remote-worker","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Strider-CD%2Fstrider-remote-worker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Strider-CD%2Fstrider-remote-worker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Strider-CD%2Fstrider-remote-worker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Strider-CD%2Fstrider-remote-worker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Strider-CD","download_url":"https://codeload.github.com/Strider-CD/strider-remote-worker/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225089361,"owners_count":17419306,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-17T20:47:07.970Z","updated_at":"2026-02-27T15:43:18.420Z","avatar_url":"https://github.com/Strider-CD.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# Strider Network Worker\nTo some extent, this document contains my thoughts about all workers,\nand indeed strider's handling of jobs generally. I'll extract that out\nlater.\n\n## Queen\n\nA queen runs the server, performs load ballancing, etc. When a worker\nconnects to the server, a Drone object is created.\n\n## Drone\n\nA drone takes jobs. The connected worker is queried as to its capacity\nand speed with a \"query-info\" event.\n\n## Data that you get with \"start job\"\n\n### Current (from strider/lib/jobs.js)\n```\n- user_id\n- github_apikey\n- job_id\n- repo_config (unsanitized)\n- deploy_config\n- deploy_target\n- repo_ssh_url\n- job_type\n- github_commit_info\n```\n### What I'd like to see\n```\n- user_id\n- repo: {\n    url: github.com/jaredly/jared.git\n    auth: {\n      type: https\n      username:\n      password:\n    } || {\n      type: ssh\n      key:\n    }\n    provider: github || bitbucket || gitlab\n    vcs: git || hg\n  }\n- job_id\n- ref: {\n    branch:\n    id:\n  } || {\n    fetch: \"+refs/pull/141/merge\"\n  }\n- job_type (TEST, DEPLOY, TEST\u0026DEPLOY)\n- trigger [see trigger spec below]\n\n// stuff gotten from the DB \u0026 config file. Any branch-specific config\n// is already factored in.\n- plugins: [names, in, order]\n- config {\n    .. defined by the plugins ..\n  }\n```\n\n#### Trigger spec\n\n```\n{\n  type:\n  author: {\n    id: \u003cstrider uid\u003e\n    url: \u003cex: github.com/username\u003e\n    name: \"Jared Forsyth\"\n    email: [optional]\n    gravatar: [suggested]\n    username: [only applicable for github, etc.]\n  }\n  message: [displayed in the ui]\n  timestamp: [required]\n  url: [message links here]\n  source: {\n    type: UI\n    page: dashboard\n  } || {\n    type: API\n    app: [app id? app name?]\n  } || {\n    type: plugin\n    plugin: name\n  }\n}\n```\n\nThe only trigger provided by default is \"manual\".\n\nIdeas for other triggers:\n- commit [by the github plugin]\n- pull-request [by the github plugin]\n- dependency [dependency-checker]\n```\n\n## Events\n\n### Events the queen listens for\n\n```\n- queue:new   {job data}\n```\nThe queen then decides which drone should handle the request. This is\nthe one that's fastest and has open capacity. If all are full, then\njust the one with the shortest queue (relative to its capacity).\n\n### Events the drone listens for\n\n```\n- job:query-info  jobid\n```\nThis will generally get fired by the `api/jobs` endpoint if there are\njobs in progress. That way the user will be able to see the full\noutput of a running job when they get to the page, not just the output\nsince they showed up.\n\n### Events the drone will fire\n\n```\n- browser   eventtype, [args]   // proxying job:* events from the remote\n- job:info  jobid, job-data     // in response to job:query-id\n```\n\n### Events the drone will fire to the remote\n\n```\n- drone:query-info\n- queue:new         {job data}\n```\n  \n### Events the remote fires to the drone\n\n```\n- drone:info     {speed: int, capacity: int} // maybe report plugins as well? See thoughts @ bottom\n```\n\n#### command specific\n\n```\n- job:cmd:start  id, num, command, screencmd [sanitized version of command]\n- job:cmd:done   id, num, exitCode\n- job:cmd:stdout id, num, text\n- job:cmd:stderr id, num, text\n```\n\n#### plugin specific\n\nCurrently these are only sent up to the browser. They aren't\npropagated by the drone on the main strider server. Do we want this?\n\n```\n- job:plugin     id, plugin, [whatever the plugin passes in]\n```\n\n#### general\n\nThey would be output as part of whatever command is currently being\nrun.\n\n```\n- job:stdout     id, text\n- job:stderr     id, text\n```\n\n#### status\n\n```\n- job:queued     id, timestamp\n- job:started    id, timestamp\n- job:tested     id, code, timestamp\n- job:deployed   id, code, timestamp\n- job:done       id, timestamp\n```\n\n# Thoughts\n\nCurrently all drones are expected to have all plugins. Is that an\nissue? Drones could of course send in `drone:info` which plugins are\ninstalled, and the queen would then only send it jobs it could\nhandle. But is there a real use case for that?\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstrider-cd%2Fstrider-remote-worker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstrider-cd%2Fstrider-remote-worker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstrider-cd%2Fstrider-remote-worker/lists"}