-
Notifications
You must be signed in to change notification settings - Fork 4
Development Management Guide
This document outlines the development process for the APIHUB product in GitHub, covering:
- Work items (issues) and their lifecycle
- Iterative development process
- Release process
Table of content
- Generic notes
- Work Items (aka tickets, aka issues)
- Development process
- AUX
The APIHUB application's source code is distributed across 20+ repositories: View the full list.
Each repository represents either:
- A standalone sub-component (microservice, library)
- A utility (autotests, workflow scripts, etc.)
The umbrella repository is: https://github.com/Netcracker/qubership-apihub.
This repository serves as the entry point for all GitHub issues and contains:
- Application-level deployment descriptors
- Application-level documentation
Development tracking is managed via the GitHub Project: qubership-apihub.
- Product owner (PO)
- Technical manager (TM)
- Dev Lead
- Developer
- QA
- TA - Test automation
We follow the Gitflow approach.
Reference: A Successful Git Branching Model.
Long story short
-
developis the the top-forward integration branch. Default branch. -
bugfix/Xandfeature/Xbranched fromdevelopand merged after dev testing, review in the branch. -
developmust be stable eventually - Stable means all AT are green
- In the end of a sprint
developis stable,releasebranch created fromdevelop - artifacts built from
releasebranch are release candidates (docker tag:next). Can be provided for any customer who ready to onboard release candidates - If any critical issues found during acceptance - bugfix taking place in
releasebranch - After acceptance,
releasebranch merged intodevelopandmain - A new
tagis set onmainbranch. Build from this tag is our release.
We have the following work items types:
- Epic
- User Story
- Bug
- Task
All work items are GitHub issues, categorized by type and labels.
- Creation: Must be created in the umbrella repository (may be transferred later).
-
Tracking: Must be added to the
qubership-apihubproject.
Please find description and creation of each work item type below
Epic is a huge umbrella work item describing some e2e functionality area.
Epic has child work items - User Stories
Epic planning horizon is a Quarter Release. Quarter Release - 3 months long development period
Epic definition of done (DoD): completion of all child User Stories
Epics statuses reviewed by Technical Manager on regular basis (once per month)
Mandatory fields:
- Assignees: alagishev
- Labels: Epic
- Type: Feature
-
Projects: qubership-apihub
- Priority: choose your option
- Status: empty
- Sprint: empty
- Milestone: choose corresponding Quarter Release
- Description: provide as much detailed description as you can
Examples:
User Story is an e2e functionality which can be delivered and tested
User Story is assigned to concrete developer and shown on team demo after completion
User Story definition of done: implemented, dev tested, demonstrated, merged to develop, QA tested, all bugs fixed, included in Release
Mandatory fields:
- Assignees: empty
- Labels: User Story
- Type: Feature
-
Projects: qubership-apihub
- Priority: Choose your option
- Status: empty
- Sprint: empty (exception: Dev Lead can create User Story directly to current Sprint)
- Team: choose BE or FE
- Relationships: choose corresponding Epic issue.
Example: User Story #7.
Bug is a defect in our product which needs to be fixed
Bug can be reported by anyone but typically reported by QA team
Bug definition of done: fixed, dev tested, merged to develop, QA tested, included in Release
Mandatory fields:
- Assignees: empty
- Labels: empty
- Type: Bug
-
Projects: qubership-apihub
- Priority: Choose your option
- Status: empty
- Sprint: empty (exception: Dev Lead can create a Bug directly to current Sprint; QA can create Bug directly to current Sprint if the Bug found during testing of a feature from current Sprint)
- Team: choose BE or FE
Example: Bug #30.
Task is a some job which is not a new feature and not a bug. Technical tasks, one-time activities, configuration, etc
Task definition of done: the task completed and accepted by Dev Lead/TM
Mandatory fields:
- Assignees: empty/concrete person
- Labels: choose your option
- Type: Task
-
Projects: qubership-apihub
- Priority: Choose your option
- Status: empty
- Sprint: empty (exception: Dev Lead can create Task directly to current Sprint; Developer can create Task for himself directly to current Sprint)
- Team: choose BE or FE
Example: Task #33.
Used for tracking design changes (example: API specification changing), the rules is the same as for User Story (so, must be under Epic).
The difference is:
- Labels: Design/documentation
- Type: Feature/Task
Example: Design Task #28.
- Issue created. Hint: It has Status=
Empty, so on the project board it is placed it the very left column - it makes it subject for review by Leads on regular Leads sync-up - The issue is reviewed by Dev Lead, the Dev Lead set Status=
Backlog/Ready for Dev, set Sprint. The issue could be Transferred to concrete GitHub repository- Issues without Sprint but with not empty status - are in a Backlog
- When time is come, Dev Lead assign the issue to Developer
-
Developer start working on the story and set Status=
In Progress - When Developer finish implementation and dev testing - he creates Pull Request (PR) to develop and set Status=
In Review- PR must have a link to the issue in Development field
- PR must have empty Projects field
- PR must have reviewers (team members)
- PR must be assigned to Dev Lead
- PR must have "green" CI workflow (no failed AT). If your PR breaks AT - see "Special cases" section.
-
Dev Lead reviews PR. When review is done and all comments addressed - PR is accepted. Dev Lead updates corresponding Issue and set Status=
In Testand add QA to the Issue asignees -
QA validates the User Story and after succesfull testing set Status=Done
- If any bugs are found during testing, QA creates new issues and set the User Story as a parent for them.
- If all found bugs has Priority <= Major, the User Story is closed by QA by set Status=
Done - If Critical+ issues found, QA set Status=In BugFix and notify Dev Lead
- QA does retest (go to step 7) of the User Story then all Critical+ issues are resolved
- If all found bugs has Priority <= Major, the User Story is closed by QA by set Status=
- If any bugs are found during testing, QA creates new issues and set the User Story as a parent for them.
Steps 1-6 are the same as for User Story
Step 7: QA validates the Bug fixed and after succesfull testing set Status=Done
If the fix is not accepted - QA set Status=In Progress and notify Developer
todo
Some issues can be marked with label fast track because of various reasons (critical issue on production, escalation from customer, urgent request from sales, etc). Such issues must be processed with the highest priority and included to the nearest release if possible.
In most cases User Stories and Bugfixes delivered to QA from develop branch. I.e. after accepting PR to develop.
It is a common process and QA knows how to take develop build.
But in case of complex risky features which involves several sub-components - it makes sense to deliver it for testing from feature branches.
Criteria for definition of such cases - common sense.
If it is time for release creation (Sprint timeline is over), but one or another User Story (already merged to develop) from the Sprint scope still has open Critical+ issue(s) - the release can be delayed for 1-2-3 days.
If you PR brings changes which breaks auto tests (AT) either FE or BE, you have the following options:
- Fix AT by yourself (preferred option)
- Ask AT engineers to adopt tests to your changes
AT adaptation must be implemented in a separate branch which will be merged to develop simultaniously with your PR.
If PR is created without any corresponding issue (small technical improvements, cosmetic changes, etc) - it must be added into project.
APIHUB product follows scrum development process.
High level flow is the following:
- Tactical planning horizon called Quarter Release. It is 3 months (12 weeks) period. Scope for it is subject for planning with Product Owner. This scope is defined by business needs and strategic roadmap. Work items: Epics
- Operational development iteration called Sprint. Sprint is 2 weeks long. Work items: User Stories and Bugs
- Development team creates deliverable (Release) in the end of each Sprint
Before start of new Quarter Release (each 3 months) Product Owner prepares prioritized list of Epics.
These Epics are reviewed with TM and Dev Leads in order to define technical and resource ability for implementation.
Finalized list of Epics is a scope for development.
TM and Dev Leads responsibility to make each Epic decomposition to User Stories
Sprint is 2 weeks long development iteration
Sprints are pre-created in project by TM
Sprint start and end happen automatically accroding to start/finish dates
- Sprint scope (included issues) need to be defined and agreed before Sprint start. It is TM and Dev Leads responsibility
- Keeping Sprint board be always up to date - TM responsibility
- Implementation of Sprint scope in time - TM and Dev Leads responsibility
- If Sprint is over but there are still not completed issues in it - they are manually moved to the next Sprint/no Sprint (Backlog) by TM
- Release is created right after Sprint completion
Release is a deliverable of APIHUB application.
Release has unique name. We are following semver approach.
Release contains:
- Artifact of each sub component except libraries (libraries can be released at any time).
- For now we are delivering several docker images
- Each sub component can have it's own version
- Deployment descriptors (docker-compose, helm chart)
- Technical documentation (installation notes)
- Release notes (a list of all work items included into release)
- (optional) Known issues list
Release represented as a tag in umbrella repository.
TM is responsible for release quality.
TM is responsible for release creation.
Notes:
- BE and FE team responsible for releasing owned sub components
- Physically release is a
tagin each repository which produces docker image
Release Example: https://github.com/Netcracker/qubership-apihub/releases/tag/1.2.0

This section describes High Level process of release creation.
- First step is to create Release Candidate.
Release candidate is built from
releasebranches. FE team has special process for this (please refer to guide). BE team simply createreleasebranch fromdevelop. - CI build process for
releasebranches produces docker images tagnext. These images are subject for comprehensive testing either on Qibership side or loyal Customers side - If any Critical+ issues are found during testing - they are fixed in
releasebranch as well as indevelop - After succesfull testing it's time to finish release. FE team has semi-automated process, BE team does it manually. Physically we have to merge
releasetomainand create atagonmainbranch. - Tag version follows semver approach.
- After all sub-components tags has been created - it's time to create overall tag in umbrella repository and write Release Notes.
- Release notes example: https://github.com/Netcracker/qubership-apihub/releases/tag/1.3.0
- The last step is to merge
develop -> mainin auto tests repositories and create tags with the same name as the tag in the umbrella repository
TODOs:
- Automate Release Notes creation (partially automated by python scripts by @alagishev. Scripts are shared with Team Leads)
- Automate release creation process e2e
| Team | Repo name | Kind | Artifacts | Application | Comment |
|---|---|---|---|---|---|
| BE | qubership-api-linter-service | microservice | Docker image | API Linter Extension | |
| Mgmt | qubership-apihub | umbrella for apihub application | Helm chart, docker compose, docs mds | APIHUB | |
| BE | qubership-apihub-agent | microservice | Docker image | APIHUB Agent | |
| BE | qubership-apihub-agents-backend | microservice | Docker image | APIHUB Agents Extension | |
| FE | qubership-apihub-api-data-model | Ts library | Npm | APIHUB | QS |
| FE | qubership-apihub-api-diff | Ts library | Npm | APIHUB | Fork, Damir |
| FE | qubership-apihub-api-doc-viewer | Ts library | Npm | APIHUB | QS |
| FE | qubership-apihub-api-processor | Ts library | Npm | APIHUB | QS |
| FE | qubership-apihub-api-unifier | Ts library | Npm | APIHUB | Fork, Damir |
| FE | qubership-apihub-api-visitor | Ts library | Npm | APIHUB | QS |
| FE | qubership-apihub-apispec-view | Ts library | Npm | APIHUB | Fork, Spectral |
| BE | qubership-apihub-backend | microservice | Docker image | APIHUB | |
| FE | qubership-apihub-build-task-consumer | microservice | Docker image | APIHUB | |
| DevOps | qubership-apihub-ci | DevOps scripts | Reusable workflows | Common | |
| FE | qubership-apihub-class-view | Ts library | Npm | APIHUB | QS |
| QA (FE) | qubership-apihub-compatibility-suites | QA | Npm | QA | |
| FE | qubership-apihub-graphapi | Ts library | Npm | APIHUB | Fork, Damir |
| FE | qubership-apihub-http-spec | Ts library | Npm | APIHUB | Fork, Spectral |
| FE | qubership-apihub-jest-chrome-in-docker-environment | QA | Npm | QA | |
| FE | qubership-apihub-json-crawl | Ts library | Npm | APIHUB | Fork, Damir |
| FE | qubership-apihub-nodejs-dev-image | Dev tooling | Docker image | Common | |
| FE | qubership-apihub-npm-gitflow | DevOps scripts | Npm | Common | |
| QA (BE) | qubership-apihub-postman-collections | QA | Newman tests | QA | |
| FE | qubership-apihub-protobufjs-research | Ts library | Npm | RnD | On hold, archived |
| FE | qubership-apihub-rest-playground | Ts library | Npm | APIHUB | Fork, Spectral |
| BE | qubership-apihub-sniffer-agent | microservice | Docker image | APIHUB Sniffer | |
| BE | qubership-apihub-test-service | QA | Docker image | QA | |
| BE | qubership-apihub-traffic-analyzer | microservice | Docker image | APIHUB Sniffer | |
| FE | qubership-apihub-ui | microservice | Docker image | APIHUB | |
| QA (FE) | qubership-apihub-ui-tests | QA | Playwright tests | QA | |
| FE | qubership-apihub-vscode | VS Code plugin | Plugin pack | APIHUB ecosystem |
Processes description
Technical articles
Design Items
- Navigation to APIHUB (log in / log out)
- Create Workspace
- Create Group
- Create Package
- Favorite packages, dashboards, groups, workspaces
- Shared Packages
- Activity History in Main Page
- Personal private workspace
- Version summary
- Revision History
- Package Activity History
- Manage Manual Operations Group
- Export Operations Group (reduced source specifications)
- Export Operations Group (combined specification)
- Export List of Operations in Excel
- Search and Filter Operations
- List of Operations
- List of Operations Groups
- Manage REST Path Prefix Group
- Activity History
- List of Deprecated Operations
- Export List of Changes in Excel
- Human‐readable description for deprecated items for OpenAPI 3.0
- List of Documents
- OpenAPI Document Overview
- Copy Package Version
- Export Package Version
- Export Document from Package Version
- Export List of Deprecated Operations in Excel
- API Quality Validation Result
- Export of discrepancy analysis results for arbitrary package versions in Excel
- AI Recommendations Tab
- General Settings
- Package versions list
- Access Tokens Management
- Delete Package
- Default Release Version
- Define Release Version Pattern