DEPRECATED 🛑- Federal Source Code policy implementation.
Code.gov is a website promoting good practices in code development, collaboration, and reuse across the U.S. Government. Code.gov will provide tools and guidance to help agencies implement the Federal Source Code Policy. It will include an inventory of the government's custom code to promote reuse between agencies and will provide tools to help government and the public collaborate on open source projects.
To learn more about the project, check out this blog post.
Code.gov is an open source project, so we invite your contributions, be it in the form of code, design, or ideas.
The development of code.gov is guided by the requirements set forth in Section 7.2 (Code Inventories and Discovery), Section 7.3 (Code.gov), and Section 7.6 (Agency Policy) of the Federal Source Code Policy. Namely:
"Within 90 days of the publication date of this policy, the Administration will launch https://www.code.gov, an online collection of tools, best practices, and schemas to help agencies implement this policy.";
"Within 90 days of the publication date of this policy, each agency’s CIO—in consultation with the agency’s CAO—shall develop an agency-wide policy that addresses the requirements of this [document.]"; and
"Within 120 days of the publication date of this policy, each agency must update—and thereafter keep up to date—its inventory of agency information resources to include an enterprise code inventory that lists custom-developed code for or by the agency after the publication of this policy."
For documentation on how to configure code-gov-web, go here.
Here’s how you can help contribute to code.gov:
Source Code Policy
If you have questions, please feel free to open an issue here: https://github.com/presidential-innovation-fellows/code-gov-web/issues or send us an email at [[email protected]].
After you have cloned this repo, you can use
npm installto install all of the project’s dependencies.
You can then run the server using
By default, the development server will listen on http://localhost:2700/. You can change the default port by setting the
PORTenvironment variable before starting the server (for example,
PORT=3000 npm start).
This app uses Karma + Jasmine to handle unit testing. Run
npm testto execute tests. To add tests, simply create a file with
.spec.tsas the extension and your tests will be included.
End-to-end testing is done with Protractor and tests are written in Jasmine with the Protractor API used to locate elements and interact with the page. Running e2e tests requires the following steps: * Run
npm startto start the application. * In a second terminal window, run
npm run webdriver:startto start the selenium server used to run the tests. This step must be done before the next step. * In a third terminal window, run
npm run e2e. The Chrome browser will be launched to run the tests and the test results will be displayed in this window.
End-to-end tests need to be written in a file with an
This app uses the
github-deploypackage for handling deployment. To configure deployment, customize the
webpack.github-deployfiles to match your settings. When ready to deploy, run
npm run federalist-deploy:devor
npm run federalist-deploy:prod, depending on your intended destination.
If you are deploying from a fork, you will have to set the
GIT_REMOTE_NAMEenvironmental variable, like
GIT_REMOTE_NAME="upstream" npm run federalist-deploy.
If you'd like to deploy an arbitrary branch, set the
GIT_BRANCH_NAMEenvironmental variable. For example the following code will deploy the current branch to https://federalist-proxy.app.cloud.gov/preview/gsa/code-gov-web/federalist-demo/#/
GIT_BRANCH_NAME="federalist-demo" npm run federalist-deploy
The app uses the production API by default. To use the staging API, set an APIURL environmental variable for the npm process. Here's two examples: ``` APIURL=stag npm run start APIURL=staging npm run start APIURL='https://code-api-staging.app.cloud.gov/api/' npm run start APIURL=staging GITREMOTE_NAME=upstream npm run federalist-deploy:dev ```
The app uses the API key provided in the code-gov-config.json by default. If you want to override that, specify an
CODE_GOV_API_KEYenvironmental variable. Here's an example:
CODE_GOV_API_KEY=l87sfdi7ybc2bic7bai8cb2i176c3b872tb3 npm run server
When pushing to staging or dev branches, you might run into an occasional error warning that the branch you're pushing to already exists. If you see this, you need to clear the cache in the gh-pages module using this command:
rm -rf node_modules/gh-pages/.cache
To update the
npm run licenses.
The directories in
src/appare organized around the pillars of Angular, along with several additional custom file types. When creating new files, be sure to add your file and any necessary templates, styles, and tests to a directory dedicated to your new file in the appropriate place.
For the most part, components are organized based on the navigation structure of the app. For example, you can find Policy Guide content in
Most Components have a
componentfile. Template files are composed of HTML with Angular syntax for inserting content and view conditionals. Styles are encapsulated by default unless the Component has
ViewEncapsulationdisabled, so global class names are generally not an issue.
This app follows the official Angular Style Guide. Please ensure you follow the naming conventions defined in this guide.
We sometimes use the word
entities. It basically means something that has repositories. Agencies are types of entities.
As stated in CONTRIBUTING:
[..] this project is in the worldwide public domain (in the public domain within the United States, and copyright and related rights in the work worldwide are waived through the CC0 1.0 Universal public domain dedication).
All contributions to this project will be released under the CC0 dedication. By submitting a pull request, you are agreeing to comply with this waiver of copyright interest.
This repo is built on top of the Angular2 Webpack Starter from Angular Class and includes the original MIT License. Should you choose to use this repo for your own purposes, be sure to retain the MIT license that comes with it.
For a detailed list of licenses from each of thenode_modules, view the Dependency Licenses file.