Apache Licensing Conversion Plan
Summary
Following up on the announced of a move to the Apache License, version 2.0 requires much more than simply throwing the license on the code repository:
- Only the next release of each application (exception: AMT) will be under the Apache license.
- We want pristine code repositories, without confusing git histories and without files that were released under the Ed-Fi license.
- Therefore a new GitHub organization has been created, Ed-Fi-Alliance-OSS.
- All files need to have appropriate file headers.
- All repositories need appropriate readme, notices, and contributor files.
- We need to scrub repos to ensure there is no sensitive information or references to DLP.
The process will proceed in stages. From a timing perspective, we want to complete all stages with this timeline:
- April: Ed-Fi Data Standard
- May: ODS/API and Analytics Middle Tier
- June: ODS/API Admin App
Exchange projects and non-core ODS platform code will be handled along the way, with no strict deadline.
For more information on the open source transition, please see the official FAQ.
Development Teams
Development teams will be created in the new organization for each scrum team, along with the preparatory work for creating the new repositories. Initially only the following teams will be created. Other teams will be created as needed. Note that TPDM and MetaEd are not here because the repositories aren't being converted to Apache.
- Ed-Fi-Tech Team:
- chrismoffatt99
- ejansson
- jasonh-edfi
- david-clements-ed-fi
- stevenarnold-ed-fi
- vimayya
- stephenfuqua
- This team will had admin access on all repositories.
- Data-Standard-Write
- ejansson
ggaronzik
- blmeyers
- tbmeador-dlp
- bradbanister
EdFiBuildAgent
- ODS-Platform-Write:
- gmcelhanon
- jamessmckay
- blmeyers
- tbmeador-dlp
- tnunnerydl
- semalaiappan
- vimayya
- EdFiBuildAgent
- ODS-Tools-Write:
- j-jordan
- plioi
- CSR2017
- saa14
- jasonh-edfi
- EdFiBuildAgent
- AndonyNS
- Analytics-Write:
- DavidJGapCR
- jleiva-gap
- kurtjohnson-HS
- david-clements-ed-fi
- EdFiBuildAgent
- lalrg
For Each Code Repository That Needs Apache Licensing
1. Create New Repo in "Ed-Fi-Alliance-OSS" or "Ed-Fi-Exchange-OSS" as appropriate
To be completed with help of the Analytics Team in April:
- Create a repository in https://github.com/ed-fi-alliance-oss with the same name as the old repository, e.g.
Ed-Fi-Common
. Do not apply a license when prompted.- Exchange projects with names like "Ed-Fi-X-...." go into https://github.com/ed-fi-exchange-oss
- Create a
development
branch. - In the new repo, click on the Settings tab and change the following options:
- Disable wikis
- Disable issues
- Disable Projects
- Enable forks
Merge button: only allow Squash Merging.
- Settings > Manage Access
- Add the team "Ed-Fi-Tech-Team" with admin rights.
- Add the appropriate development team(s) with write access (e.g. "ODS-Platform-Write").
- Settings > Branches (the following are defaults settings; confer with Stephen about any requested changes)
Set default branch to
development
main
.As of August 2020, the Alliance is transitioning to having a single
main
branch and nomaster
/development
branches. Releases will be tagged on themain
branch when ready.Branch protection rule formaster
:Pattern: "master"Include administrators: true
Branch protection rule fordevelopment
:Pattern: "development"Require pull request reviews before merging: trueRestrict who can dismiss pull requests reviews: Ed-Fi-Tech-Team
- Branch protection rule for
main
:- Pattern: "main"
- Require pull request reviews before merging: true
- Restrict who can dismiss pull requests reviews: Ed-Fi-Tech-Team
2. Prepare the New Repository Before Adding Code
The following broad plan may be customized on a per-project basis, especially for Exchange contributions. Developers should rely on the detailed notes in the Jira ticket over this general plan.
To be completed with help of the Analytics Team:
- Switch to
development
branch and create a feature branch as usual. - Copy the LICENSE file from here into the new repository.
- Copy the NOTICES.md file from here into the new repository
- Replace the project name at the top.
- Customize the license notifications as appropriate for the repository.
- Copy the "Template-README.md" file from here into the new repository as "README.md" and make the following updates:
- Insert project file name on line 1
- Insert a general repo/project overview at line 3
- Add appropriate links in "more information" section.
- Add other text and headings as desired at line 12.
- Modify line 22 to link to a Tracker query/filter.
- Copy the "CONTRIBUTORS.md" file from here into the new repository. Add the project's name at the top and list the actual contributors. People under contract do not have to be listed because it is a work-for-hire and is treated as "contributed by the Ed-Fi Alliance". Can list those developers as courtesy as desired by the repo manager.
Commit and push to GitHub.
Pull request into
development
.- Peer review.
Assign to Stephen Fuqua for final review and merge.
3. Preparing Source Code
To be completed by the responsible Scrum team in the old ("source") repository.
- Open the repository directory with VS Code or another good text editor.
- Do a global search for "DLP" and "DoubleLine".
- If it is a file header with copyright, then just delete the header. Step 6 below will insert a new file header.
- If it is other text with "DLP" then replace with Ed-Fi as appropriate.
- Do a global search for "password" and "key" in .config and .md. If anything is found that looks like a real password or API key then remove it. Create a ticket if this is going to be breaking something, and then go ahead and break things. Cannot let any sensitive information get through.
Are there any other types of config files in the repo? XML, JSON? If so check those as well. Even if the information looks old and outdated, remove it! Maybe it actually still works. Even if not, we don't want people to think Ed-Fi is being careless about sensitive data.
Of course markdown files that provide instructions are exempt - you can leave clearly fake credential information in such files.
- Confirm that there is no .git-credentials file.
- Brainstorm anything else that shouldn't be here and take care of it.
- Add a file header to all source code (*.cs, *.cshtml, *.ps*, *.py, *.metaed, *.sql, *.js only for our content - not jquery etc).
- This script will take care of all C#, PowerShell, Python, MetaEd, and SQL files within a given directory path: https://github.com/Ed-Fi-Alliance/OSS-Sample/blob/master/InsertFileHeaders.ps1
- Commit and merge into source repo's active development branch.
4.a. Migrating to the New Repository
To be completed by the responsible Scrum team on previously agreed schedule:
The development team needs to pause what they are doing while this is going on - or otherwise plan to cherry pick or manually copy their changes into the new repository once all steps are done.
- In the original project, checkout the
development-v3
branch after step 2 is complete. - Run
git clean -xdf
in the repository to get rid of all binaries. - Clone the new repository into a different location.
- Create a branch off of
development
. - Copy files from the source repository to the new repository.
- Open the primary solution file in Visual Studio and add a solution folder for the markdown files: readme, notices, contributors (no reason to add license, since that file should not be modified further).
- Commit all on a feature branch, merge to
development
through the normal process.
Additional Tasks
- Vinaya Mayya Jason Hoekstra all (most?) nuspec files for generating NuGet packages have a link to the repository. These links will need to change. Applies to NuGet packages in ODS-Implementation, ODS-Deploy, and AdminApp projects.
- We can leverage ReSharper and a VS Code plugin (there are a few to choose from) to help with adding headers automatically on new files. I haven't actually experimented with this and would appreciate if other people can take this on with a ticket or two. ODS Platform team seems best for this Vinaya Mayyacan I create a couple of spike tickets in the ODS project?
- Jason Hoekstra please note the comment several lines above (#9) about JavaScript files. Admin App has at least one JavaScript file that needs the code header, so updating that needs to be included in the acceptance criteria for the ticket(s) that bring AdminApp development branch into the new repo.
4.b TeamCity Updates
To be completed by the responsible Scrum team with help from Stephen as needed:
- Carefully adjust build configurations. Will need to analyze, as some build configurations need to remain on the old repositories (e.g. leave 2.x configurations alone). Change both the repository link and the default branch, which will now be
development
instead ofdevelopment-v3
. - TODO: instructions on TeamCity quality check requirement in GitHub.
- TODO: instructions on securing so that pull requests do not automatically trigger a build unless coming from a trusted user. Otherwise we risk arbitrary code running on TeamCity.
5. Closing Up Old Repositories
To be completed by the responsible Scrum team:
- Tag the
development-v3
branch:moved-to-new-repo
. - Push a readme update to
*-v3
branches, something like "All development activity and future releases have been moved to repository xyz".
6. All Team Developers
- Learn how to sign commits.Tutorial: Signing Git Commits and Tags - Developer Space
- Delete or move your old local clones. Create branch clones of the new repositories. Do not add a new remote to your existing repos because we do not want to bring old Git history into the new repositories on accident.
Repository Analysis
"analysis pending" below generally means this is an Exchange repository and we need to investigate the IP closely before making a decision.
Steps 1 and 2 will be completed by the Analytics team. Steps 3-5 should be completed by the responsible scrum team. The tasks for Steps 1 and 2 are listed below for benefit of the Product Owners, but the other tasks will not be listed in order to keep this page from being overwhelmed with JIRA links.
Not Converting
Active closed-source tools
- Atom-MetaEd
- axure-prototypes
- Ed-Fi-DataImport
- Ed-Fi-Exchange-2.0 → renamed to Ed-Fi-Template-Sharing
- ed-fi-gist
- Ed-Fi-LearningStandards-Proxy
- Ed-Fi-Meadowlark
- Ed-Fi-ODS-Deploy
- Should consider moving the PowerShell parts of it.
- Ed-Fi-TeamCity-Configs
- Ed-Fi-SqlServer-to-Postgres
- Ed-Fi-TestComplete-Tests
- Ed-Fi-TPDM-Model
- MappingEDU
- MetaEd
- MetaEd-IDE
- MetaEd-js
- Ed-Fi-Model
- MetaEd-Contrib
Miscellaneous old / deprecated repositories
- ApiValidationProxy
- certification
- ConversionTool
- ed-fi.orgv2
- Ed-Fi-Apps
- ed-fi-buildsys
- Ed-Fi-Core
- Ed-Fi-DataWarehouse
- edfi-license
- Ed-Fi-NuGet-Packages → never used, therefore deleted
- Ed-Fi-ODS-Admin-Panel-POC
- Ed-Fi-ODS-API-SDK → only for suite 2
- ed-fi-ods-buildsys
- Ed-Fi-Ods-Deploy-AWS → archived
- Ed-Fi-ODS-Test-Scripts → archived
- ed-fi-rfc-openapi-ui
- Ed-Fi-Samples → archived
- Ed-Fi-Tech-Exchange
- MetricMetadataUtility
- OSS-Sample
- SDG-Dist
- swagger-codegen-cli
- TPDM
- validation
- Ed-Fi-Extensions-Framework - Eric confirmed no longer active, will archive it.
- Ed-Fi-X-DataFlow-Maps → archived
- Ed-Fi-X-DataImport-Samples - Jason confirmed no longer needed → archived on
Old Dashboard
- Dashboards-Plugin-NWEA
- Dashboards-Plugin-Usage
- Dash-ETL-Int
- Ed-Fi-Dashboard
- Ed-Fi-Dashboard-Plugins
- Ed-Fi-Dashboard-Plugins-Transportation
- Ed-Fi-Dashboards-Core
- EdFi-X-Dashboard-ETL-2.2
Converting
Analytics Team
- Analytics Middle Tier
- Ed-Fi-X-Data-Analytics
ODS Platform Team
- Ed-Fi-Common
- Ed-Fi-Databases
- Ed-Fi-MigrationUtility
- Ed-Fi-ODS
- Ed-Fi-ODS-Implementation
- swagger-ui
ODS Tools Team
- Ed-Fi-LearningStandards-Client
- Ed-Fi-ODS-AdminApp
- Ed-Fi-SDG
Exchange
- Ed-Fi-X-ETL-To-Generate
- Ed-Fi-X-ODS-Deploy-AWS
- Ed-Fi-X-Ods-Deploy-Azure
- Ed-Fi-X-ODS-Docker
- Ed-Fi-X-OtisEd-iMart
- Doug Loyo's projects - confirmed by Silvia
- Ed-Fi-X-Performance
- Ed-Fi-X-WISEid
- Ed-Fi-X-API-Publisher
- Eventually, but not yet ready. Wait for word from Chris / Silvia / Geoff.
- Ed-Fi-X-AssessmentRoster - sent email to Audrey Shay
- Ed-Fi-X-Credential - already has Apache license
- Ed-Fi-X-Ods-Assessment-API-Bridge
- Ed-Fi-API-By-AEM - sent email to Chris and Lyria
- Generate-related so probably just move it forward along with the other Generate project.
- Ed-Fi-X-3.1-Assessment-Loaders - sent email to Scott Kuykendall and Sayee
- Ed-Fi-X-DescriptorTool - email to
ChrisSilvia- There's no code here yet. Already created a new repo for Silvia and deleted the old one.
- Ed-Fi-X-GoogleClassroom - email to Silvia and Emilio Baez
- Ed-Fi-X-Teacher-Preparation-Dashboard - email to Steven and Chris
Other
Open Questions
- Ed-Fi-X-Extractors-eSchoolPlus - email to Jean-Francois Guertin
- Might not be any code to publish here, waiting for response from Rafael L. in San Marcos
- Ed-Fi-X-Finance - email to Sayee
Need to review the list again, there may be some missing Exchange repositories.