{"id":26913667,"url":"https://github.com/worldline-go/chore","last_synced_at":"2026-03-05T00:03:04.401Z","repository":{"id":56764573,"uuid":"524059600","full_name":"worldline-go/chore","owner":"worldline-go","description":"Requests with control-flows","archived":false,"fork":false,"pushed_at":"2025-01-16T20:33:55.000Z","size":9125,"stargazers_count":40,"open_issues_count":4,"forks_count":5,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-05-31T15:31:43.215Z","etag":null,"topics":["api","control-flow","go","low-code","template"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/worldline-go.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-08-12T11:17:37.000Z","updated_at":"2025-04-10T18:21:42.000Z","dependencies_parsed_at":"2023-01-31T04:45:22.240Z","dependency_job_id":"6526a4df-4f0c-464d-a823-4f4ea7bde6a2","html_url":"https://github.com/worldline-go/chore","commit_stats":{"total_commits":58,"total_committers":3,"mean_commits":"19.333333333333332","dds":0.5,"last_synced_commit":"237e73ba9508e1b2ee7ce8d88634c0ae27c6afad"},"previous_names":["worldline-go/chore","rakunlabs/chore"],"tags_count":23,"template":false,"template_full_name":null,"purl":"pkg:github/worldline-go/chore","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/worldline-go%2Fchore","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/worldline-go%2Fchore/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/worldline-go%2Fchore/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/worldline-go%2Fchore/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/worldline-go","download_url":"https://codeload.github.com/worldline-go/chore/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/worldline-go%2Fchore/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30101673,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-04T23:59:36.199Z","status":"ssl_error","status_checked_at":"2026-03-04T23:56:48.556Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["api","control-flow","go","low-code","template"],"created_at":"2025-04-01T16:38:27.695Z","updated_at":"2026-03-05T00:03:04.347Z","avatar_url":"https://github.com/worldline-go.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"docs/logo/chore.svg\" height=\"120\" /\u003e\n\nChore tool help to send request with templates and customizable flow diagram.\n\n__-__ [info page of ui](docs/info/intro.md)\n\nTemplate playground go to [repeatit.io](https://repeatit.io)\n\nIf you need any feature, find a bug or fixing something send pull request or open issue we will handle it.\n\n## Fast Start and Use\n\n```sh\ndocker run -d --name postgres -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres:14.5-alpine\ndocker run -it --rm --name chore -p 8080:8080 -e STORE_HOST=172.17.0.1 -e STORE_SCHEMA=public ghcr.io/worldline-go/chore:latest\n```\n\nOpen browser and go to http://localhost:8080\n\nLogin with `admin:admin` and after that create your flow, template and run it.\n\n![chore](./docs/info/chore.gif)\n\n## Usages\n\nChore uses PostgreSQL database.\n\n_First initialization user and password is **admin:admin**, changable with configuration_\n\n### Configuration\n\nCamel or snake-case usable for keys.\n\n```yaml\nsecret: thisisfordevelopmenttestsecret\nuser:\n  name: admin\n  password: admin\nstore:\n  type: postgres\n  schema: chore\n  host: \"127.0.0.1\"\n  port: \"5432\"\n  user: postgres\n  # password: test\n  dbName: postgres\n  timeZone: UTC\n  # also you can set with DSN name, if DSN name exists other values not using\n  # dbDataSource: \"postgres://postgres@127.0.0.1:5432/postgres?application_name=testdb\"\n  # default database connection values\n  connMaxIdleTime: 0\n  connMaxLifetime: \"15m\"\n  maxIdleConns: 5\n  maxOpenConns: 7\n\n# migrate same as store and copy undefined part in store value\nmigrate:\n  password: formigration\n  user: migration\n\n# base_path: /chore # to set mywebsite.com/chore/\n# host: 0.0.0.0 # default\n# port: 8080 # default\n# log_level: info # default\n```\n\nSecret is important for tokens, to generate own token, use one of this commands:\n\nWith openssl\n```sh\nopenssl rand -base64 32 | tr -- '+/' '-_'\n```\n\nWith linux shell\n```sh\ndd if=/dev/urandom bs=32 count=1 2\u003e/dev/null | base64 | tr -d -- '\\n' | tr -- '+/' '-_'; echo\n```\n\n__WARN__ when secret changed, all previous tokens not usable after that.\n\nSet config file path to `CONFIG_FILE` environment variable.\n\nChore can get your configurations from vault, consul, file or with environments values.\n\nTo work with vault and consul set `PREFIX_VAULT` and `PREFIX_CONSUL` to show the path of the config file and `APP_NAME` default is __chore__. Details check [igconfig](https://github.com/worldline-go/igconfig) library to see how it works.\n\nAnd run chore on container or binary.\n\nConnect to the chore UI with browser and add template, authentication and design own control flow.\n\n\u003cdetails\u003e\u003csummary\u003eTemplate, Auth, Control information\u003c/summary\u003e\n\n### Template\n\nTemplate is a text file format. `Go template` and `sprig` functions supported.\n\nFor example using some functions and flow inside of template.\n\n```\nID: {{uuidv4}}\nName: {{.name | b64enc}}\n{{if eq .name \"golang\" }}\nLink: DeepCore\n{{end}}\n\n{{- range .specs}}\n{{.name}} {{repeat .point \"⭐\"}}\n{{- end}}\n```\n\nIn here `name` is a key of a map or struct and it print value.\n\nFor testing in a playground try [repeatit.io](https://repeatit.io), this webapp developed by us.\n\n### Auth\n\nThis give us information about secret headers after that use with request flow node.\n\nWith basic-auth(username and password) use this header `Authorization: Basic \u003cbase64 username:password\u003e` but in 2FA status this cannot work so use Bearer Token(personal access token PAT) most of cases or ask IT to get new user which can work with api.\n\nWith Personal access token, generate token in the profile page and use with `Authorization: Bearer \u003cTOKEN\u003e`.\n\n### Control\n\nFlow diagram to create your algorithm in UI.\n\nTo start flow send request `/send` endpoint as POST request.  \nServer will check __endpoint__ and __control__ values with your __JSON/YAML__ payload.\n\nExample: (generate token in token section of chore)\n\n```sh\ncurl -X POST -H \"Authorization: Bearer ${TOKEN}\" -d 'name: deepcore' \"http://localhost:8080/api/v1/send?control=try\u0026endpoint=test\"\n```\n\nOr you can send as json value `-d '{\"name\":\"deepcore\"}'`\n\nOr send file directly, (when sending yaml format always use binary format due to yaml has new line and ascii format not hold that values)\n\n```sh\ncurl -X POST -H \"Authorization: Bearer ${TOKEN}\" --data-binary @values.yml \"http://localhost:8080/api/v1/send?control=try\u0026endpoint=test\"\n```\n\n\u003c/details\u003e\n\n## Development\n\n\u003cdetails\u003e\u003csummary\u003eBuild and run\u003c/summary\u003e\n\n### Run\n\nRequired services (PostgreSQL) before to run.\n\n```sh\nmake env\n# for drop\n# make env-down\n```\n\nRun project\n\n```sh\nmake run\n```\n\nFrontend\n```sh\nmake run-front\n```\n\nAfter this step just go to the `localhost:3000` address.\n\n__NOTE__ frontend(`localhost:3000`) has proxy and `/api` path request goes to the server.\n\n### Build\n\nGenerate swagger (don't need if you didn't change related codes)\n```sh\nmake docs\n```\n\nBuild project to generate binary\n```sh\nmake build\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eDummy-Whoami Server for Test\u003c/summary\u003e\n\n```sh\ndocker run --rm -it --name=\"whoami\" -p 9090:80 traefik/whoami\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\u003csummary\u003eFill tables\u003c/summary\u003e\n\nUse chore's record script to download/opload operation\n\nBefore to run script export __TOKEN__ variable with own chore token.\n\nChange `-h` (help) parameter to any arguments of the shell script.\n\n```sh\nexport TOKEN=\"\"\ncurl -fksSL https://raw.githubusercontent.com/worldline-go/chore/main/data/record.sh | bash -s -- -h\n```\n\nOr first download it and after run.\n\n```sh\ncurl -O -fksSL https://raw.githubusercontent.com/worldline-go/chore/main/data/record.sh \u0026\u0026 chmod +x record.sh\n```\n\nExample arguments\n```sh\n# download just one item\n--url http://localhost:8080 --mode download --auth jira\n# update all auths, controls and templates files\n--url http://localhost:8080 --mode download --auths --controls --templates\n# upload all auths folder\n--url http://localhost:8080 --mode upload --auths\n# upload just one item\n--url http://localhost:8080 --mode upload --template confluence/ter\n```\n\nGet temporary(1 hour) token with username and password\n\n```sh\nexport TOKEN=\"$(curl -fksSL -u admin:admin http://localhost:8080/api/v1/login?raw=true)\"\n```\n\n\u003c/details\u003e\n\n## Todo\n\n- [ ] Activate group information\n- [ ] Support custom method entries\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fworldline-go%2Fchore","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fworldline-go%2Fchore","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fworldline-go%2Fchore/lists"}