{"id":20082026,"url":"https://github.com/exercism/tooling-invoker","last_synced_at":"2025-07-03T18:09:29.581Z","repository":{"id":39863251,"uuid":"278207786","full_name":"exercism/tooling-invoker","owner":"exercism","description":"WIP temporary extraction from analyzer-pipeline","archived":false,"fork":false,"pushed_at":"2025-06-27T10:19:19.000Z","size":273,"stargazers_count":2,"open_issues_count":2,"forks_count":6,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-06-30T05:23:47.562Z","etag":null,"topics":["community-contributions-paused"],"latest_commit_sha":null,"homepage":null,"language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/exercism.png","metadata":{"funding":{"github":["exercism"],"custom":["https://exercism.org/donate"]},"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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,"zenodo":null}},"created_at":"2020-07-08T22:33:14.000Z","updated_at":"2025-06-27T10:19:22.000Z","dependencies_parsed_at":"2024-02-01T12:45:57.786Z","dependency_job_id":"8c3e0d52-d3fe-4247-9d48-2e2a27c60f11","html_url":"https://github.com/exercism/tooling-invoker","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/exercism/tooling-invoker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exercism%2Ftooling-invoker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exercism%2Ftooling-invoker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exercism%2Ftooling-invoker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exercism%2Ftooling-invoker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/exercism","download_url":"https://codeload.github.com/exercism/tooling-invoker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/exercism%2Ftooling-invoker/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262953221,"owners_count":23390164,"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":["community-contributions-paused"],"created_at":"2024-11-13T15:41:27.622Z","updated_at":"2025-07-03T18:09:29.538Z","avatar_url":"https://github.com/exercism.png","language":"Ruby","funding_links":["https://github.com/sponsors/exercism","https://exercism.org/donate"],"categories":[],"sub_categories":[],"readme":"# Tooling Invoker\n![Tests](https://github.com/exercism/tooling-invoker/workflows/Tests/badge.svg)\n[![Maintainability](https://api.codeclimate.com/v1/badges/c203fecce87e38343289/maintainability)](https://codeclimate.com/github/exercism/tooling-invoker/maintainability)\n[![Test Coverage](https://api.codeclimate.com/v1/badges/c203fecce87e38343289/test_coverage)](https://codeclimate.com/github/exercism/tooling-invoker/test_coverage)\n\n## Local Setup\n\nThe production version of this code uses `runc`.\nThis only works on Linux and not within Docker.\nHowever, there is a local version available which runs off a locally checked out piece of tooling.\n\nTo use this, do the following:\n- Clone a tooling repo to the directory parallel for this (e.g. `ruby-test-runner`)\n- Set a AWS profile called `exercism_tooling_invoker` with an access key and secret.\n\nTests can be run locally on any system.\n\nTo build the Dockerfile, run:\n```\ndocker build -f Dockerfile.dev -t exercism-tooking-invoker .\n```\n\nTo execute the Dockerfile, run the following with your AWS keys:\n```\n./bin/run-docker $AWS_ACCESS_KEY_ID $AWS_SECRET_ACCESS_KEY\n```\n\n### Running Tests inside Docker\n\nNote: Tests can be run without the full [v3-docker-compose](https://github.com/exercism/v3-docker-compose/) stack\n\n```bash\n# to run bundle exec rake test\n./docker/test\n```\n\nOr to jump into a console, then just run commands as normal:\n\n```bash\n./docker/console\n{^_^} tooling-invoker\n      /usr/src/app % bundle exec rake test\n```\n\n## Filesystem Layout\n\n_This is WIP_\n\nThe containers live in a directory (currently `CONTAINERS_DIR` but will be in config).\n\nEach iteration is then hosted as follows:\n\n```\n- containers\n  - ruby\n    - releases\n      - xxx\n    - current (symlink to a releases sha)\n    - runs\n      - iteration_xxx-iteration_slug-xxx (iteration_dir)\n        - code\n          - ...user's code\n        - config.json (symlink to invocation_config.json)\n```\n\nWithin the runc environment we have:\n```\n- /opt\n    - container_tools\n      - runc\n    - test-runner (or /opt/analyzer or /opt/representer)\n\n```\n\n## Layout within containers\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexercism%2Ftooling-invoker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fexercism%2Ftooling-invoker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexercism%2Ftooling-invoker/lists"}