{"id":20643906,"url":"https://github.com/adjust/goem","last_synced_at":"2025-05-10T08:31:10.320Z","repository":{"id":6709180,"uuid":"7954746","full_name":"adjust/goem","owner":"adjust","description":"go extension manager","archived":true,"fork":false,"pushed_at":"2015-12-03T17:28:03.000Z","size":79,"stargazers_count":33,"open_issues_count":3,"forks_count":2,"subscribers_count":77,"default_branch":"master","last_synced_at":"2025-03-22T07:51:27.296Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","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/adjust.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-02-01T08:47:50.000Z","updated_at":"2024-09-05T11:46:21.000Z","dependencies_parsed_at":"2022-09-08T14:30:59.991Z","dependency_job_id":null,"html_url":"https://github.com/adjust/goem","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/adjust%2Fgoem","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adjust%2Fgoem/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adjust%2Fgoem/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adjust%2Fgoem/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adjust","download_url":"https://codeload.github.com/adjust/goem/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253389742,"owners_count":21900805,"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-16T16:14:17.072Z","updated_at":"2025-05-10T08:31:10.002Z","avatar_url":"https://github.com/adjust.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"goem\n====\n\nA detailed description can be found [here](http://big-elephants.com/2013-09/goem-the-missing-go-extension-manager/)\nThis article explains the capabilities of goem with a detailed example.\n\n# go extension manager\n\n## What is this?\n\nThis is a little nifty tool to simplify the go development process.\nThe vanilla go only allows one go path at a time. If you want to setup\nseveral development environments, you have to setup them all by yourself\nand set the proper environmental variables.\nThis is where goem helps by setting up one Go environment for each project.\nRight now goem only supports git repositories.\n\n## Requirements\n\ngoem is written in pure go and only uses the core libraries.\nAll you need is a working go and git installation.\n\n## Installation\nFirst clone this repository.\nTo install goem you can run the build shell script.\n\n```\nbash build\n```\n\nIt compiles goem and tries to install it to \"/usr/local/bin\".\n\nOf course you can just run\n```\ngo build main.go\n```\nand put the binary where you want.\n\n## How does it work?\n\nYou need a so called \"Gofile\". This is json file, which specifies the dependencies of\nyour Go project. An example Gofile is provided in \"example/Gofile\".\nNow you can run\n```\ngoem bundle\n```\n\nThis command creates a dot-go directory and uses this as your GOPATH.\nNow run\n```\ngoem build binary_name\n```\nto build your binary called \"binary_name\".\n\n## Supported Actions\n\n### Init\n\n* goem init\n\nInit creates and initializes a new Gofile in current working directory.\n\nA new Gofile looks like\n\n```json\n        {\n            \"env\": [\n                {\n                    \"name\": \"development\",\n                    \"packages\": []\n                }\n            ],\n            \"testdir\": \"./test\"\n        }\n```\n\nIf Gofile already exists init will not override it.\n\n### List\n\n* goem list\n\nList lists all packages currently installed in your local gopath.\n\n### Bundle\n\n* goem bundle\n\nBundle reads your Gofile and fetches all packages in the desired version.\n\nAn example Gofile looks like that:\n\n```json\n        {\n            \"env\" : [\n                {\n                    \"name\" : \"development\",\n                    \"packages\": [\n                        {\n                            \"name\" : \"github.com/adjust/goenv\",\n                            \"branch\" : \"\u003ccd3a33acbec38335c00b4ae252274827893d4e5b\"\n                        }\n                    ]\n                }\n            ]\n        }\n```\n\n* env\n\nThis is your GO_ENV which is read from GO_ENV environment variable.\nIf the environment variable is not set, goem sets it to 'development'.\nIf the Gofile provides only one env, this env is read.\n\n* packages\n\nPackages have a name and a branch. The name is the same as the one\nyou would use for a 'go get package'. The branch can be a branch,\na commit hash or a tag.\nIf branch is set to 'self', goem assumes you have your library *.go\nfiles in a subfolder with the same name as your project and symlinks this\nto the goem Gopath.\n\ne.g.:\n\n```\n                For example the following directory structure:\n                    project_name\n                    |\n                    |__project_name\n                    |   |\n                    |   |__\n                    |\n                    |__.go\n                    |   |\n                    |   |__src\n                    |       |\n                    |       |__your_account\n                    |\n                    |\n                    |__main.go\n\n```\n\nWould create a symlink from project_name/projectname to\nproject_name/.go/src/your_account/project_name\nAlso you can use a relative or absolute path. This will also put a symlink to\nthe goem Gopath.\n\n### Build\n\n* goem build\n\nBuild your project with all the dependencies listed in your Gofile.\nIf no 'binname' is provided, the binary is called a.out.\n'binname' can also be a path:\n\nFor example the following directory structure:\n\n```\n            project_root\n            |\n            |__bin\n            |   |\n            |   |__\n            |\n            |__main.go\n\n```\n\nTo build the binary in bin/ called 'nifty_bin', you would call\n'goem build bin/nifty_bin'\n\nAbsolute paths are also allowed.\n\n### Test\n\n* goem test\n\nRun the tests as you would with go test.\nAs goem commands need to be run from the projects root,\nyou have to specify the test directory, if it is not the root directory.\n\nFor example the following directory structure:\n\n```\n            project_root\n            |\n            |__test_folder\n            |   |\n            |   |_nifty_test.go\n            |\n            |__main.go\n\n```\nIn this case you need to add the 'testdir' key in your Gofile:\n\ne.g.:\n\n```json\n                    {\n                        \"testdir\": \"test_folder\"\n                    }\n```\n\nThen run goem test\n\n### Help\n\n* goem help\n\nShows the avaiable commands.\n\n\n## License\n\nThis Software is licensed under the MIT License.\n\nCopyright (c) 2012 adjust GmbH,\nhttp://www.adjust.com\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadjust%2Fgoem","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadjust%2Fgoem","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadjust%2Fgoem/lists"}