Product Lifecycle Management (PLM) in Git

gitplm logo

Go code stats Go Report Card

Product Lifecycle Management (PLM) in Git.

This repo contains a set of best practices and an application that is used to manage information needed to manufacture products. This information may consist of bill of materials (BOM), PCB manufacturing files (gerbers, drawings), mechanical manufacturing files (STL, drawings), software programming files (hex, bin), source control documents, documentation, etc. Each development/design process will output and store manufacturing files in a consistent way, such that a program can collect all these information assets into a package that can be handed off to manufacturing.

Installation

You can download a release for your favorite platform. This tool is a self-contained binary with no dependencies.

Alternatively, you can:

  • go intstall github.com/git-plm/gitplm@latest

or

  • download repo and run: go run .

Type gitplm from a shell to see commandline options:

Usage of gitplm:
  -kbom string
        Update KiCad BOM with MFG info from partmaster for given PCB IPN (ex: PCB-056)
  -version int
        Version BOM to write

Requirements

  1. support "internal" part numbers (IPN)
  2. be able to search where parts are used
  3. have a single partmaster
  4. partmaster should be machine readable/updatable
  5. eliminate duplicate parts
  6. handle product variations
  7. handle alternate sources for parts
  8. be able to diff different BOM versions

Principles

  • manual operations/tweaks to machine generated files is bad. If changes are made (example a BOM line item add/removed/changed), this needs to be defined declaratively and then this change applied by a program. Ideally this mechanism is also idempotent, so we describe where we want to end up, not steps to get there. The program can determine how to get there.
  • the number of parts used in a product is bounded, and can easily fit in computer memory (IE, we probably don't need a database for small/mid sized companies)
  • the total number of parts a company may use (partmaster) is also bounded, and will likely fit in memory for most small/mid sized companies.
  • tracking changes is important
  • review is important, thus Git workflow is beneficial
  • ASCII (text) files are preferred as they can be manually edited and changes easily review in Git workflows.
  • versions are cheap -- VVVV should be incremented liberally.
  • PLM software should not be tied to any one CAD tool, but should be flexible enough to work with any CAD output.

Tool features

  • populate development BOMs with MPN by cross-referencing IPN to partmaster and populating BOM with MPN information found in partmaster.
  • add or remove parts from BOM (specified in yaml file next to BOM)

See issues for future ideas.

Implementation

  • a single partmaster is used for the entire organization and contains internal part numbers (IPN) for all assets used to build a product.
  • internal part numbers (IPN) use the Basic format: CCC-NNN-VVVV
    • CCC: major category (RES, CAP, DIO, etc)
    • NNN: incrementing sequential number for each part
    • VVVV: variation to code variations of a parts typically with the same datasheet (resistance, capacitance, regulator voltage, IC package, etc.) Also used to encode the version of custom parts or assemblies.
    • rational: part numbers should be as short as possible, but some structure is beneficial. See this article for a discussion why short part numbers are important.
    • see partnumbers.md for more discussion on part number formats.
  • libraries for CAD tools use IPN rather than manufacturing PN (MPN). The reason for this is that many parts tend to be used in multiple assemblies. If a source for a part changes, then this can be changed in one place (partmaster) and all products BOMs that use the IPN can be programmatically updated. If MPN is stored in the CAD part libraries, then the cad library part needs updated, all designs that use the part need updated, then BOMs need re-generated, etc. This is much more manual and error prone process which cannot be easily automated.
  • use CSV files for partmaster and all BOMs.
    • rational: can be read/written by excel/libreoffice or by machine
    • rational: easy to get started
  • Every asset used in manufacturing (PCB, mechanical part, assembly, SW release, document, etc.) is defined by a IPN
  • A product is defined by a hierarchy of IPNs.
  • An assembly is defined by a BOM, which is file in CSV format named: <part-number>.csv
  • development/design repos store manufacturing output files in directories where the directory name is the IPN for that part. A design directory will have an output directory for each version. (Ex: PCB-0023-0001, PCB-0023-0002, PCB-0023-0003)
  • product/manufacturing metadata lives in a manufacturing repo that pulls in all the development repo as Git submodules. These development repos contain release directories.
  • Tooling may modify BOMs, partmaster, etc but Git is used to track all changes.
  • versions in part numbers are sequential numbers: (0, 1, 2, 3, 4)
    • rational: easy to use in programs, sorting, etc
  • CAD BOMs are never manually "scrubbed". If additional parts are needed in the assembly, create a higher level BOM that includes the CAD generated BOM.
    • rational: since the CAD program generates the BOM in the first place, any manual processing of this BOM will only lead to mistakes.
  • Git "protected" branches can be used to control product release processes.
  • CSV files should be delimited with ';' instead of ','.
    • rational: comma is useful in lists, descriptions, etc.
  • Tooling is written in Go.
    • rational:
      • Go programs are reasonably reliable
      • it is easy to generate standalone binaries for most platforms with no dependencies
      • Go is fast
      • Go is easy to read and learn.
      • The Go package ecosystem is quite extensive. go-git may be useful for tight integration with Git.
      • Program can be started as a command line program, but eventually grow into a full-blown web application.

Example #1: populate design BOM with MPN info

  • git clone https://github.com/git-plm/gitplm.git
  • cd gitplm/example
  • go run ../ -kbom PCB-019 -bomVersion 23
    • this recursively searches current directory and subdirectories for a file named PCB-019.csv and then creates a BOM with supplier part information from the part master
  • notice the cad-design/PCB-019-0023/PCB-019-0023.csv file now exists with MFG information populated.

Directory structure:

  • partmaster.csv (CSV file that contains all parts used by the organization)
  • cad-design (design directory for PCB design)
    • PCB-019.csv (BOM file generated by CAD tool with IPN, but not MPN)
    • PCB-019.yml (File of parts that are added or removed from BOM)
    • PCB-019-0023/ (v23 output directory)
      • PCB-020-0023.csv (BOM generated by extracting MPN from partmaster)
      • gerbers.zip (other output files generated by the release process)
      • assy-drawing.pdf (other output files generated by the release process)

Example #2: product release

This example is at the idea phase, so no implementation/example yet.

  • Top level BOM contains parts for mechanical housing, screws, wire, several PCBs, custom mechanical parts, etc.
  • a program loops through the top level BOM and builds up a hiearchical directory of files from the output directory of each component.
  • ouput directories containing the component are found by recursing through directories and looking for a directory containing directory names in the IPN format.

The output directory structure may look something like:

  • productXYZ/ (top level mfg directory for this product)
    • ASY-001.csv (top level BOM for this product)
    • ASY-001-0002/ (v2 output directory of this product assembly)
      • CHANGELOG.md (changes in this release)
      • ASY-001-0002.csv (Bom that contains screws, wire, etc and below sub assemblies)
      • PCB-020-0004/ (v4 of the controller board)
        • CHANGELOG.md (PCB changes)
        • PCB-0020-0004.csv
        • gerber.zip
        • assembly-drawing.pdf
      • MEC-023-0004/ (3d printed plastic part)
        • CHANGELOG.md (mechanical changes)
        • MEC-023-0004.csv (empty file)
        • drawing.pdf (2d drawing with notes)
        • model.stl (3d model used by printing process)
      • SFT-011-0100/ (software installation files for the device)
        • CHANGELOG.md (changlelog for sw project)
        • robot.hex (programming file)

Example #3: update an electrical part in the partmaster

TODO:

  • find what products use this part
  • update multiple products that might use the same part

Reference Information

Support, Community, Contributing, etc.

Pull requests are welcome! Issues are labelled with "help wanted" and "good first issue" may be good places to start if you would like to contribute to this project.

For support or to discuss this project, use one of the following options:

License

Apache Version 2.0

Owner
Git PLM
Git based product life-cycle management
Git PLM
Similar Resources

Transaction management tool for taxable investments

Market Lot Robot Transaction management tool for taxable investments. How it works Run the web socket server with the following command: go run . Visi

Oct 19, 2021

Small proof of concept project to try temporal.io with Dispatch Incident Management from Netflix.

Small proof of concept project to try temporal.io with Dispatch Incident Management from Netflix.

temporal-dispatch-poc Small POC project to try out the Temporal workflow engine together with Netflix's Dispatch Incident Management System. Supported

Nov 12, 2021

🕕Todo management through emails

🕕Todo management through emails

🕕Todo management through emails

Nov 15, 2021

Golang-module-references - A reference for how to setup a Golang project with modules - Task Management + Math Examples

Golang Module Project The purpose of this project is to act as a reference for setting up future Golang projects using modules. This project has a mat

Jan 2, 2022

Go-turing-i2c-cmdline - Controlling the i2c management bus of the turing pi with i2c works fine

go-turing-i2c-cmdline What is it? Controlling the i2c management bus of the turi

Jan 24, 2022

This Go based project of Aadhyarupam Innovators demonstrate the code examples for building microservices, integration with cloud services (Google Cloud Firestore), application configuration management (Viper) etc.

This Go based project of Aadhyarupam Innovators demonstrate the code examples for building microservices, integration with cloud services (Google Cloud Firestore), application configuration management (Viper) etc.

Dec 22, 2022

go.mod file is the root of dependency management in Go

go.mod file is the root of dependency management in Go. All the modules which are needed or to be used in the project are maintained in go.mod file. I

Feb 9, 2022

Supply chain management indie game... IN SPACE!

Supply chain management indie game... IN SPACE!

Ship shape Supply chain management indie game ... IN SPACE! Current state is preliminary - there's a six-level tutorial, about an hour's worth of game

Nov 3, 2022

Product Analytics, Business Intelligence, and Product Management in a fully self-contained box

Product Analytics, Business Intelligence, and Product Management in a fully self-contained box

Engauge Concept It's not pretty but it's functional. Track user interactions in your apps and products in real-time and see the corresponding stats in

Nov 17, 2021

Zms - The Bhojpur ZMS is a software-as-a-service product applied in different risk management areas. It is a containment Zone Management System based on Bhojpur.NET Platform.

Bhojpur ZMS - Zone Management System The Bhojpur ZMS is a software-as-a-service product used as a Zone Management System based on Bhojpur.NET Platform

Sep 26, 2022

An open-source, distributed, cloud-native CD (Continuous Delivery) product designed for developersAn open-source, distributed, cloud-native CD (Continuous Delivery) product designed for developers

An open-source, distributed, cloud-native CD (Continuous Delivery) product designed for developersAn open-source, distributed, cloud-native CD (Continuous Delivery) product designed for developers

Developer-oriented Continuous Delivery Product ⁣ English | 简体中文 Table of Contents Zadig Table of Contents What is Zadig Quick start How to use? How to

Oct 19, 2021

A sub module of EdgeGallery MECM which responsible for the app lifecycle management

mecm-applcm Description Application life cycle manager is part of MEP manager whose responsibility is to handle the host level life cycle management i

Jan 10, 2022

A simple application lifecycle management tool with multiple servers.

A simple application lifecycle management tool with multiple servers.

Aug 13, 2022

🚢 Go package providing lifecycle management for PostgreSQL Docker instances.

🚢  Go package providing lifecycle management for PostgreSQL Docker instances.

🚢 psqldocker powered by ory/dockertest. Go package providing lifecycle management for PostgreSQL Docker instances. Leverage Docker to run unit and in

Sep 2, 2022

PolarDB Cluster Manager is the cluster management component of PolarDB for PostgreSQL, responsible for topology management, high availability, configuration management, and plugin extensions.

What is PolarDB Cluster Manager PolarDB Cluster Manager is the cluster management component of PolarDB for PostgreSQL, responsible for topology manage

Nov 9, 2022

Modular Kubernetes operator to manage the lifecycle of databases

Ensemble Ensemble is a simple and modular Kubernetes Operator to manage the lifecycle of a wide range of databases. Infrastructure as code with Kubern

Aug 12, 2022

Addon Operator coordinates the lifecycle of Add-ons in managed OpenShift

Addon Operator coordinates the lifecycle of Add-ons in managed OpenShift

Addon Operator Addon Operator coordinates the lifecycle of Addons in managed OpenShift. dev tools setup pre-commit hooks: make pre-commit-install glob

Dec 29, 2022

cluster registration and lifecycle

Cluster Registration Contains controllers that support the registration of managed clusters to a hub to place them under management. Community, discus

Nov 6, 2022

The cortex-operator is a project to manage the lifecycle of Cortex in Kubernetes.

cortex-operator The cortex-operator is a project to manage the lifecycle of Cortex in Kubernetes. Project status: alpha Not all planned features are c

Dec 14, 2022
Comments
  • change HPN to IPN

    change HPN to IPN

    Seems "internal part number" is a little more obvious than "house part number", as house could be confused with manufacturing/assembly house.

  • tool to declaratively modify a BOM (add/remove/modify line item)

    tool to declaratively modify a BOM (add/remove/modify line item)

    during BOM generation process (example kbom), user could optionally add a file that includes instructions for modifying a BOM. This helps reduce the errors that creep in when manual tweaks to BOM files are made.

  • update mfg assembly package

    update mfg assembly package

    This process takes a top level BOM and collects manufacturing information for each part found in the BOM and builds up a complete list. See https://github.com/git-plm/gitplm#example-2-product-release

  • Generate multiple BOM SKUs using YML file

    Generate multiple BOM SKUs using YML file

    It would be handy to be able to generate assembly BOMs for multiple product SKUs -- perhaps one assembly has a ferrite bead, and another does not.

    • PCA-010-0001: version 1 base SKU
    • PCA-010-0101: version 1 with bead
    • PCA-010-0002: version 2 base SKU
    • PCA-010-0102: version 2 with bead

    The syntax of the BOM modification file could be expanded to generate multiple SKUs. Perhaps something like:

    # applied to all SKUs
    - name: modifications for all skews
      remove:
        - cmpName: Test point
        - cmpName: Test point 2
        - ref: D12
      add:
        - cmpName: "screw #4,2"
          ref: S3
          ipn: SCR-002-0002
    
    # only applied to base SKU
    - name: base SKU
      varBase: 0000
      remove:
        - ref: F12
    
    # generate special SKU with ferrite bead
    - name: with ferrite bead
      varBase: 0100  # adds 0100 to variation number and generates an additional BOM
      add:
        - cmdName: "Ferrite Bead"
          ipn: FER-003-1123
    
Related tags
🚀 Backend for Online Courses Builder | SaaS Product

Backend app for Online Course Constructor Platform Build & Run (Locally) Prerequisites go 1.15 docker golangci-lint (optional, used to run code checks

Jan 3, 2023
CRUD Product with JWT Auth

simple-crud-product CRUD Product with JWT Auth Start with docker compose up (already featured with database automigrate) Test the API using postman co

Oct 11, 2021
An efficient Go Rapid Product Assembly system used within the Bhojpur.NET Platform ecosystem.

Bhojpur GoRPA - Builder, Packager, Assembler An efficient Go-based Rapid Product Assembly software tool used within the Bhojpur.NET Platform ecosystem

Apr 28, 2022
The Bhojpur BSS is a software-as-a-service product used as an Business Support System based on Bhojpur.NET Platform for application delivery.

Bhojpur BSS - Business Support System The Bhojpur BSS is a software-as-a-service product used as an Business Support System based on Bhojpur.NET Platf

Sep 26, 2022
Enforce git message commit consistency
Enforce git message commit consistency

Gommit Gommit analyze commits messages to ensure they follow defined pattern. Summary Setup Usage Practical Usage Third Part Libraries Setup Download

Jan 4, 2023
Help to release a project which especially has multiple git repositories

This project aims to help to release a project which especially has multiple git repositories. Installation Install it to a Kubernetes cluster. You ca

Dec 15, 2022
gal - generate authors file from git log

[日本語] gal - generate authors file from git log gal command generate AUTHORS.md file at current directory. gal command gets the author name and email a

Aug 19, 2022
literature management for bio programmers
literature management for bio programmers

literature management for bio programmers

Oct 24, 2022
Complete container management platform

Rancher Rancher is an open source project that provides a container management platform built for organizations that deploy containers in production.

Jan 8, 2023
An unified key management system to make life easier.
An unified key management system to make life easier.

Safebox An unified key management system to make life easier. The main goal of safebox is to make key backup easier with single main key to derive the

Nov 15, 2022