{"id":35240235,"url":"https://github.com/sillsdev/appbuilder-buildengine-api","last_synced_at":"2026-04-08T19:31:00.995Z","repository":{"id":37588149,"uuid":"59839306","full_name":"sillsdev/appbuilder-buildengine-api","owner":"sillsdev","description":"REST API for the SIL App Publishing Service","archived":false,"fork":false,"pushed_at":"2026-04-02T16:03:30.000Z","size":1556,"stargazers_count":1,"open_issues_count":13,"forks_count":2,"subscribers_count":5,"default_branch":"develop","last_synced_at":"2026-04-03T03:50:10.579Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://hub.docker.com/r/silintl/appbuilder-buildengine-api/","language":"TypeScript","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/sillsdev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2016-05-27T14:14:38.000Z","updated_at":"2026-04-02T16:03:38.000Z","dependencies_parsed_at":"2025-02-20T16:33:14.713Z","dependency_job_id":"bbd10c5c-25a1-4dc7-b2e5-b05159ba0126","html_url":"https://github.com/sillsdev/appbuilder-buildengine-api","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/sillsdev/appbuilder-buildengine-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sillsdev%2Fappbuilder-buildengine-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sillsdev%2Fappbuilder-buildengine-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sillsdev%2Fappbuilder-buildengine-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sillsdev%2Fappbuilder-buildengine-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sillsdev","download_url":"https://codeload.github.com/sillsdev/appbuilder-buildengine-api/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sillsdev%2Fappbuilder-buildengine-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31571599,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"ssl_error","status_checked_at":"2026-04-08T14:31:17.202Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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":[],"created_at":"2025-12-30T04:58:42.667Z","updated_at":"2026-04-08T19:31:00.983Z","avatar_url":"https://github.com/sillsdev.png","language":"TypeScript","readme":"# appbuilder-buildengine-api #\nThis is the Web Service interface for the SIL App Publishing Service.\n\n## Build Status ##\nDevelop: ![GitHub Status for sillsdev/appbuilder-buildengine-api](https://github.com/sillsdev/appbuilder-buildengine-api/actions/workflows/main.yml/badge.svg?branch=develop)\n\nMaster: ![GitHub Status for sillsdev/appbuilder-buildengine-api](https://github.com/sillsdev/appbuilder-buildengine-api/actions/workflows/main.yml/badge.svg?branch=master)\n\n\n## API Specs ##\nhttps://docs.google.com/document/d/1TejImnRbPAozWh12FQA5OcffJKRaJHhIyO0ivvjNl2E/edit?usp=drive_link\n\n## Doorman: Service Provisioning ##\n\n[Doorman](https://doorman.sil.org) is a web application developed by [GTIS](http://gtis.sil.org) that automates the\nworkflow of approval and provisioning of services for SIL and affiliate organizations (requires Insite authentication).\nExamples of the services are: Smartsheet, Trello, HipChat, Jira, and CrashPlan.\n\nFor the SIL App Publishing Service, Doorman will provide the following services:\n\n* Readiness Check\n* Collect Publishing Project Definition\n    * Project Name\n    * Language Code\n    * App Publishing Key\n    * App Store (Currently: Wycliffe USA)\n    * Future: Account for expenses and charges (if we cannot cover them)\n* Notifies Service Admin for Project Creation Approval\n* Create Git Repo in AWS CodeCommit \u0026 assigns access rights to user using App Publishing Key\n* Requests New Project in BuildEngine (includes App Publishing URL)\n* Notifies user of App Publishing URL and request them to Send/Receive project\n* Requests New Build in BuildEngine -\u003e Build Artifact in S3\n* Builds App for Initial Store Entry\n* Notifies User for Review\n* Notifies Service Admin for Review, Approval, and creation of initial App Store Entry (must be done by human; Play Store limites number/day)\n* Request BuildEnging to Publish App to Google Play Store\n* Manages Service/Update of Project\n\n### Dependencies ###\nIn production, there is a dependency on Amazon Web Services for the following services:\n\n* [CloudWatch](https://aws.amazon.com/cloudwatch/)\n* [CodeBuild](https://aws.amazon.com/codebuild/)\n* [CodeCommit](https://aws.amazon.com/codecommit/)[^1]\n    * create repository for storing project configuration\n* [Identity and Access Management (IAM)](https://aws.amazon.com/iam/)\n    * create users based on project provisioning requests\n    * create group based on user's Entity of Assignment and add user to group\n    * give permission to user to access CodeCommit Repo\n* [Relational Database Services (RDS)](https://aws.amazon.com/rds/)\n    * store project, build, and release information for BuildEngine Web Service\n    * Note: In development, we use a MariaDB database to simulate RDS database\n* [S3](https://aws.amazon.com/s3/)\n\n### Deployment ###\nThe staging version is available at https://doorman-sab.gtis.guru.\n\n## App Publishing Service ##\nThe App Publishing Service is a collection of applications that are deployed as Docker containers.  Docker containers\nare based on Linux Containers which is a virtualization strategy that reuses Linux Kernel of the host and isolates\napplications in a mini Linux system.  Therefore, the host for these containers must be a Linux system (which can be run\nin a Virtual Machine on non-Linux systems for development).\n\nThere is a set of containers:\n\n* BuildEngine - RESTful Web Service used by Doorman\n    * web - REST API implementation that takes requests and updates database\n    * cron - processes the updates to the database and interfaces with CodeBuild; updates database with status from CodeBuild\n\n### Deployment ###\n\nIn production, the containers are deployed to a docker container service, like [Amazon ECS](https://aws.amazon.com/ecs/).\nFor local development, these containers can be deployed to:\n\n * Docker CE: Linux or Mac\n * Vagrant: Windows or Linux\n\n\nNote: Docker Toolbox exists for Windows, however it an [issue with interactive terminal](https://github.com/docker/docker/issues/12469) (docker -it container command).\nThis limitation makes it difficult to debug issues during development and is not recommended.\n\nFor SIL development or staging, please contact @chris_hubbard for access to the SIL LSDev account.\n\n# Development setup instructions #\n\n**APP_ENV** is a variable that differentiates development, staging, and production environments.\nFor development environments, you should use the form \"development-USERNAME-MACHINE\" (e.g. development-chrish-win).\nWhenever you see **APP_ENV** in the directions, please substitute with your chosen environment string.  **APP_ENV** should\nbe limited to alphanumeric characters, '.', '\\_', and '-' (CodeCommit limit).\n\n**AWS_USER_ID** is a 12 digit number that you can get from [AWS Support Center](https://console.aws.amazon.com/support/home)\nWhenever you see **AWS_USER_ID** in the directions, please substitute with the value from your account.\n\n* On Windows, you will need to install [Git for Windows](https://git-scm.com/download/win) and execute commands from a Git Bash shell.\n* [Clone Source Repositories](#clone-source-repositories) for  ```appbuilder-buildengine-api``` and ```docker-appbuilder-agent```\n* [Create BuildEngine SSH Key](#create-buildengine-ssh-key) to be used to authenticate git access to jenkins config data\n* [Associate BuildEngine SSH Key](#associate-buildengine-ssh-key) to a user in IAM\n* [Create S3 Folders](#create-s3-folders) to store credentials\n* [Give permissions to IAM users](#give-permissions)\n* [Build Engine Configuration](#build-engine-configuration)\n* [Deploy containers](#deploy-containers) for BuildEngine\n\n#### Clone Source Repositories ####\nYou will need to authenticate to GitHub to be able to clone the repositories. You can either use username/password with the HTTPS urls:\n\n```bash\ngit clone https://github.com/sillsdev/appbuilder-buildengine-api\ngit clone https://github.com/sillsdev/docker-appbuilder-agent\n```\n\nOr you can create an SSH Key, store the private and public key in ~/.ssh, and associate the public key with your GitHub account.\n\n```bash\nmkdir -p ~/.ssh\nchmod 700 ~/.ssh\nssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa\n# login to https://github.com/settings/keys/ and \"New SSH Key\" using ~/.ssh/id_rsa.pub\ngit clone git@github.com:sillsdev/appbuilder-buildengine-api\ngit clone git@github.com:sillsdev/docker-appbuilder-agent\n```\n\nIf you want to create a separate SSH Key just for GitHub, you can create the SSH Key in a subdirectory of ~/.ssh and then add an entry to\n~/.ssh/config (which normally doesn't exist--create an empty file) to specify the location of the key.\n\n```\nHost github.com\n\tIdentityFile ~/.ssh/github/id_rsa\n```\n\n[Back](#development-setup-instructions)\n\n#### Create BuildEngine SSH Key ####\nBuildEngine uses git to synchronize the git Repository with ssh keys for authentication.\n\n1. Create ~/.ssh/buildengine_api directory\n2. Create ssh key in ~/.ssh/buildengine_api directory (use an empty key phrase)\n```bash\nmkdir -p ~/.ssh/buildengine_api\nchmod 700 ~/.ssh/buildengine_api\nssh-keygen -t rsa -b 4096 -f ~/.ssh/buildengine_api/id_rsa\nopenssl rsa -in ~/.ssh/buildengine_api/id_rsa -pubout \u003e ~/.ssh/buildengine_api/id_rsa_pub.pem\n```\n\nThis will also save the public key to ~/.ssh/buildengine_api/id_rsa.pub\n\n[Back](#development-setup-instructions)\n\n#### Associate BuildEngine SSH Key ###\nBuildEngine uses SSH authentication to access the Git repository which store Jenkins job configuration.\nYou need to associate the SSH Public Key with a user in IAM.\n\n1. In AWS, go to IAM service and create or select a user which will be the \"Build Engine\" user for your deployment\n    + Note: You will need the ```Access Key Id``` and ```Secret Access Key``` for this user later.\n2. Select the Security Credentials tab\n3. Click on \"Upload SSH public key\" button\n4. Open ~/.ssh/buildengine_api/id_rsa.pub with a text editor and copy all of the text\n5. Paste the text into the \"Upload SSH public key\" page.\n6. Click on the \"Upload SSH public Key\" button\n7. You should see a new entry under \"SSH keys for AWS CodeCommit\". Save the value of \"SSH Key ID\" for the new uploaded key to ~/.ssh/buildengine_api/ssh_key_id.txt\n\n[Back](#development-setup-instructions)\n\n#### Create S3 Folders ####\nBuildEngine and AppBuilder use [s3-expand](https://github.com/silinternational/s3-expand) to extract credentials needed to\naccess resources. \n\n* Create the following folder in [AWS S3](https://console.aws.amazon.com/s3/home)\n```\nsil-appbuilder-secrets/APP_ENV/buildengine_api/ssh\n```\n* Save buildengine_api private and public key in S3\n```\nsil-appbuilder-secrets/APP_ENV/buildengine_api/ssh/id_rsa\nsil-appbuilder-secrets/APP_ENV/buildengine_api/ssh/id_rsa.pub\n```\n\nCodeBuild is used to initiate jobs that can build the application and/or publish them to the Google Play Store.\n\nThe credentials being saved here are to support a system that will build the application using AppBuilder:\n\n* Create the following folders in [AWS S3](https://console.aws.amazon.com/s3/home)\n```\nsil-appbuilder-secrets/APP_ENV/jenkins/build/appbuilder_ssh\nsil-appbuilder-secrets/APP_ENV/jenkins/build/google_play_store\n```\n \n\n* Save appbuilder private and public key in S3\n```\nsil-appbuilder-secrets/APP_ENV/jenkins/build/appbuilder_ssh/id_rsa\nsil-appbuilder-secrets/APP_ENV/jenkins/build/appbuilder_ssh/id_rsa.pub\n```\n\nAppBuilder needs additional credentials for signing APK files.  These\n\n* Create the following folder in S3\n```\nsil-appbuilder-secrets/APP_ENV/jenkins/build/google_play_store/wycliffeusa\n```\n\n* Create a wycliffeusa.keystore (using Scripture App Builder from Tools-\u003eCreate New KeyStore menu)\n* When creating a keystore, there are 3 other pieces of information needed to access the keystore later.\n    * Key Store Password\n    * Key Alias Name\n    * Key Alias Password\n* Create text files (that will be uploaded to S3) with the values entered for these 3 pieces of information.\n    * ksp.txt - Key Store Password\n    * ka.txt - Key Alias\n    * kap.txt - Key Alias Password\n* Upload wycliffeusa.keystore, ksp.txt, ka.txt, and kap.txt to ```sil-appbuilder-secrets/APP_ENV/jenkins/build/google_play_store/wycliffeusa```\n\nIf the credentials being saved here are to support a system that will publish the application to Google Play Store:\n* Create the following folder in S3\n```\nsil-appbuilder-secrets/APP_ENV/jenkins/publish/google_play_store/wycliffeusa\n```\n* Upload playstore_api.json to ```sil-appbuilder-secrets/APP_ENV/jenkins/publish/google_play_store/wycliffeusa```\n\n \n[Back](#development-setup-instructions)\n\n#### Give Permissions ####\nThere are 3 different users involved in accessing S3 resources\n\n* Build Engine\n    * S3: Access secrets\n    * S3: Put build artifacts\n    * IAM: Create User and Groups, Manage SSH Key\n    * CodeCommit: Create Repository\n* End User\n    * CodeCommit: Read/Write Project data\n\nCreate the following policies:\n\n* S3 App Builder Secrets - extract ssh keys to access Git repository for Job DSL configuration\n    + In [AWS IAM Policies](https://console.aws.amazon.com/iam/home#polices), Create Policy\n    + Select \"Create Your Own Policy\"\n    + Set the Policy Name to \"s3-appbuilder-secrets-APPENV\"\n    + Paste in this text and then click on \"Create Policy\"\n\n```javascript\n{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"s3:GetBucketLocation\",\n                \"s3:ListBucket\"\n            ],\n            \"Resource\": [\n                \"arn:aws:s3:::sil-appbuilder-secrets\"\n            ]\n        },\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"s3:GetObject\"\n            ],\n            \"Resource\": [\n                \"arn:aws:s3:::sil-appbuilder-secrets/*\"\n            ]\n        }\n    ]\n}\n```\n\n* S3 App Builder Artifacts - write and delete build artifiacts accessed by end user via Doorman\n    + Note: These are a too permissive.  TODO: Work on minimal set.\n    + In [AWS IAM Policies](https://console.aws.amazon.com/iam/home#polices), Create Policy\n    + Select \"Create Your Own Policy\"\n    + Set the Policy Name to \"s3-appbuilder-artifacts-APPENV\"\n    + Paste in this text and then click on \"Create Policy\"\n\n```javascript\n{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"*\"\n            ],\n            \"Resource\": [\n                \"arn:aws:s3:::sil-appbuilder-artifacts\"\n            ]\n        },\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"*\"\n            ],\n            \"Resource\": [\n                \"arn:aws:s3:::sil-appbuilder-artifacts/*\"\n            ]\n        }\n    ]\n}\n```\n\n* CodeCommit Repository for project data\n    + In [AWS IAM Policies](https://console.aws.amazon.com/iam/home#polices), Create Policy\n    + Select \"Create Your Own Policy\"\n    + Set the Policy Name to \"codecommit-projects-APPENV\"\n    + Paste in this text and then click on \"Create Policy\"\n\n```javascript\n{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"codecommit:GetBranch\",\n                \"codecommit:GitPull\",\n                \"codecommit:GitPush\",\n                \"codecommit:ListBranches\"\n            ],\n            \"Resource\": [\n                \"arn:aws:codecommit:us-east-1:AWS_USER_ID:*\"\n            ]\n        }\n    ]\n}\n```\n\n* Project creations and building\n    + In [AWS IAM Policies](https://console.aws.amazon.com/iam/home#polices), Create Policy\n    + Select \"Create Your Own Policy\"\n    + Set the Policy Name to \"projects-creation-and-building-APPENV\"\n    + Paste in this text and then click on \"Create Policy\"\n\n```javascript\n{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Sid\": \"VisualEditor0\",\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"iam:CreateGroup\",\n                \"iam:AddUserToGroup\",\n                \"iam:ListSSHPublicKeys\",\n                \"iam:GetSSHPublicKey\",\n                \"iam:UploadSSHPublicKey\",\n                \"iam:GetUser\",\n                \"iam:CreateUser\",\n                \"iam:GetGroup\",\n                \"iam:PutGroupPolicy\",\n                \"iam:GetRole\",\n                \"iam:CreateRole\",\n                \"iam:AttachRolePolicy\",\n                \"iam:PassRole\",\n                \"codebuild:CreateProject\",\n                \"codebuild:BatchGetProjects\",\n                \"codebuild:BatchGetBuilds\",\n                \"codebuild:StartBuild\",\n                \"codebuild:StopBuild\"\n            ],\n            \"Resource\": \"\"\n        },\n        {\n            \"Sid\": \"VisualEditor1\",\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"codecommit:GetRepository\",\n                \"codecommit:CreateRepository\",\n                \"codecommit:DeleteRepository\"\n            ],   \n            \"Resource\": \"arn:aws:codecommit::*:*\"\n        }\n    ]\n}\n````\n* CodeBuild Base Policy for Building\n    + In [AWS IAM Policies](https://console.aws.amazon.com/iam/home#polices), Create Policy\n    + Select \"Create Your Own Policy\"\n    + Set the Policy Name to \"codebuild-basepolicy-build_app-APPENV\"\n    + Paste in this text and then click on \"Create Policy\"\n````\n{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Resource\": [\n        \"arn:aws:logs:us-east-1:AWS_USER_ID:log-group:/aws/codebuild/build_app\",\n        \"arn:aws:logs:us-east-1:AWS_USER_ID:log-group:/aws/codebuild/build_app:*\"\n      ],\n      \"Action\": [\n        \"logs:CreateLogGroup\",\n        \"logs:CreateLogStream\",\n        \"logs:PutLogEvents\"\n      ]\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Resource\": [\n        \"arn:aws:s3:::codepipeline-us-east-1-*\"\n      ],\n      \"Action\": [\n        \"s3:PutObject\",\n        \"s3:GetObject\",\n        \"s3:GetObjectVersion\"\n      ]\n    }\n  ]\n}\n````\n\n* CodeBuild Base Policy for Publishing\n    + In [AWS IAM Policies](https://console.aws.amazon.com/iam/home#polices), Create Policy\n    + Select \"Create Your Own Policy\"\n    + Set the Policy Name to \"codebuild-basepolicy-publish_app-APPENV\"\n    + Paste in this text and then click on \"Create Policy\"\n````\n{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Resource\": [\n        \"arn:aws:logs:us-east-1:AWS_USER_ID:log-group:/aws/codebuild/publish_app\",\n        \"arn:aws:logs:us-east-1:AWS_USER_ID:log-group:/aws/codebuild/publish_app:*\"\n      ],\n      \"Action\": [\n        \"logs:CreateLogGroup\",\n        \"logs:CreateLogStream\",\n        \"logs:PutLogEvents\"\n      ]\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Resource\": [\n        \"arn:aws:s3:::codepipeline-us-east-1-*\"\n      ],\n      \"Action\": [\n        \"s3:PutObject\",\n        \"s3:GetObject\",\n        \"s3:GetObjectVersion\"\n      ]\n    }\n  ]\n}\n````\nAttach the following policies to the \"Build Engine\" user:\n\n* s3-appbuilder-secrets-APP_ENV\n* s3-appbuilder-artifacts-APP_ENV\n* projects-creation-and-building-APP_ENV\n\n[Back](#development-setup-instructions)\n\n#### Build Engine Configuration ####\nIn the directory where you cloned ```appbuilder-buildengine-api```, do the following:\n\n* copy local.env.dist to local.env and update the variables. Replace SOME_KEY with your chosen environment string.\n* set ```EXPAND_S3_KEY``` and ```EXPAND_S3_SECRET``` to the ```Access Key Id``` and ```Secret Access Key``` of the Build Engine User.\n* set ```AWS_ACCESS_KEY_ID``` and ```AWS_SECRET_ACCESS_KEY``` to the ```Access Key Id``` and ```Secret Access Key``` of the Build Engine User.\nitory.\n* set ```AWS_USER_ID``` to the value from [AWS Support Center](https://console.aws.amazon.c\n* set ```BUILD_ENGINE_GIT_SSH_USER``` to the value of ~/.ssh/buildengine_api/ssh_key_id.txt\n* set ```APPBUILDER_GIT_SSH_USER``` to the value stored in ~/.ssh/appbuilder/ssh_key_id.txt\n* set ```BUILD_ENGINE_REPO_URL``` to the ssh url saved from creating the Build Engine reposom/support/home)\n* set ```API_ACCESS_TOKEN``` to some unique string to your environment.\n    + This will be used during testing for HTTP Bearer Token Authentication.\n    + See [RFC6750](https://tools.ietf.org/html/rfc6750) for more details.\n\n[Back](#development-setup-instructions)\n\n### Deploy Containers ###\n\n* If deploying to native Docker on Linux or Docker Toolbox on Mac, set environment variable DOCKER_UIDGID\n```bash\necho 'export DOCKER_UIDGID=\"$(id -u):$(id -g)\"' \u003e\u003e ~/.profile\nsource ~/.profile\n```\n\n#### Docker CE: Linux ####\n* [Install Docker CE](https://docs.docker.com/install/linux/docker-ce/ubuntu/)\n* [Install Docker-Compose](https://docs.docker.com/compose/install/)\n* NOTE: DOCKER_UIDGID needs to be set in environment\n* Start services\n```bash\ndocker-compose up -d\n```\n\n#### Vagrant: Windows or Linux ####\n* [Install VirtualBox](https://virtualbox.org)\n* [Install Vagrant](https://vagrantup.com)\n* Start vagrant \u0026 services\n```bash\nvagrant up\nvagrant ssh\n```\n\n#### Docker CE: Mac ####\n* [Install Docker CE for Mac](https://docs.docker.com/docker-for-mac/install/)\n* [Install Docker-Compose](https://docs.docker.com/compose/install/)\n* NOTE: DOCKER_UIDGID needs to be set in environment\n* Start docker and services\n```bash\ndocker-compose up -d\n```\n\n[Back](#development-setup-instructions)\n\n# Testing API #\nDoorman interacts with BuildEngine using a RESTful Web Interface.  This can be simlated with a Google Chrome Extension called Advanded REST Client.\n\n* Install [Advanced REST Client](https://chrome.google.com/webstore/detail/advanced-rest-client/hgmloofddffdnphfgcellkdfbfbjeloo?utm_source=chrome-app-launcher-info-dialog) to test Web Service\n* [Give User Write Permissions to CodeCommit](#give-user-write-permissions-to-codecommit)\n* [Create AppBuilder CodeCommit Repository](#create-appbuilder-codecommit-repository)\n* [Commit Project](#commit-project) to AppBuilder CodeCommit repository\n* [Add Job to BuildEngine]\nTODO:\n* Get job\n* Request a build for a job\n* Get build status\n* Publish a build\n\n\n#### Give User Write Permissions to CodeCommit ####\nFor development deployment, we will need a project to test with.  Earlier we created a codecommit-project-APP_ENV policy\nthat gives the appbuilder user read/write permissions to any repository with the name prefix of projects-APP_ENV-.\n\n* Add the following text to ~/.ssh/config to use the appbuilder ssh key to commit the project.\n\n```\nHost git-codecommit.*.amazonaws.com\n    User USERNAME\n    IdentityFile ~/.ssh/appbuilder/id_rsa\n```\n\n* Change USERNAME to be the value of ~/.ssh/appbuilder/ssh_key_id.txt\n\n#### Create AppBuilder CodeCommit Repository ####\nWe use CodeCommit Git repositories for storing the data for the project.  The Doorman service provisioning application\nautomates the creation of the repository and setting the security.  We need to simulate that here.\n\n1. Go to  [AWS CodeCommit](https://console.aws.amazon.com/codecommit/home)\n2. Click \"Create new repository\"\n3. Set the repository name to projects-APP_ENV-PROJECT_NAME\n4. Click on the \"Clone URL\" dropdown and select SSH.  Copy the URL for the next step.\n\n#### Commit Project ####\n* Copy a project to use for testing\n    + In a ~/App\\ Builder/Scripture\\ Apps/App\\ Projects/, copy some project to projects-APP_ENV-PROJECT_NAME\n* In a command window, do the following:\n    + cd ~/App\\ Builder/Scripture\\ Apps/App\\ Projects/projects-APP_ENV-PROJECT_NAME\n    + git init\n    + git add .\n    + git commit -m \"Initial Revision\"\n    + git remote add origin URL\n        * URL is the \"Clone URL\" from [Create AppBuilder CodeCommit Repository](#create-appbuilder-codecommit-repository)\n    + git push origin master\n\n#### Add Job to BuildEngine ####\nThe base URL of BuildEngine depends on how you deployed BuildEngine\n\n* Start Google Chrome and Switch to \"Apps\" in Google Chrome and select ARC\n* set URL (first field) to http://BUILDENGINE_HOST/job (BUILDENGINE_HOST depends on how BuildEngine was deployed)\n    + vagrant (Windows or Linux): 192.168.70.121\n    + native docker (Linux): localhost\n    + docker-machine (Mac): run ```docker-engine ip default``` to determine IP\n        * most likely: 192.168.99.100\n* set VERB to POST\n* set Headers to (replace YOUR_API_TOKEN)\n```\nAccept: application/json\nAuthorization: Bearer YOUR_API_TOKEN\nContent-Type: application/json\n```\n* set Payload to (replace YOUR_REQUEST_ID with a unique value like the return value of ```date +%s```)\n```javascript\n{\n    \"request_id\" : \"YOUR_REQUEST_ID\",\n    \"git_url\" : \"ssh://git-codecommit.us-east-1.amazonaws.com/v1/repos/projects-APP_ENV-PROJECT_NAME\",\n    \"app_id\" : \"scriptureappbuilder\",\n    \"publisher_id\" : \"wycliffeusa\"\n}\n```\n* Click Send\n\n\n[^1]: We use for the Git Repository since AWS only charges for $1/month/active-user.  For many projects, the user\nrequesting the project will be active for a short period of time and then not modify the project repository for a long time.\nIt would be possible to use another Git service (like [GitHub](https://github.com)) to host the project repository, but will require to make a\ncode change in application/common/model/Job.php to allow other repository urls).\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsillsdev%2Fappbuilder-buildengine-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsillsdev%2Fappbuilder-buildengine-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsillsdev%2Fappbuilder-buildengine-api/lists"}