-
Notifications
You must be signed in to change notification settings - Fork 718
VPP Pushing_and_Testing_a_Tag
The vpp package builds utilize
git describe
to construct the versions for Ubuntu and Debian packages built. This is done by the
build-root/scripts/version
script. Because of this when we want to change versions, we need to lay a tag, and then test to see that what we expected to happen happens.
This page covers how to push and test a tag on existing branches, it does *not* cover pulling new branches.
vpp's branching structure currently is:
----------- master ---------------------------->
\
\------ stable/1606------->
The master branch is where the bulk of development takes place.
The stable/1606 branch is the 'throttle' for preparing the 16.06 release. Only bug fixes should go into stable/1606.
It is expected that we will in the future carry forward a similar structure, example:
----------- master ------------------------------------------------------------------------>
\ \
\------ stable/1606-------> \---------stable/1609----->
git describe walks back through the history of the specified (in this case current) commit till it finds a tag. If two or more tags are found on that commit, it will pick the newest tag. (note: its more complicated than this in corner cases which we should not hit, feel free to read the git describe manpage.
- Tags are to be annotated (and preferably signed)
- Tags are of the format "${next release version for this branch}-${optional rc}"
- ${next release version for this branch} for a "stable/${YY}${MM}" branch is "v${YY}.${MM}"
- ${optional rc} is of the form rc0 (note lower case rc) on master
- ${optional rc} is of the form rc1 or rc2 (note lower case rc) on "stable/${YY}${MM}" branches
Examples:
- If the next release after 16.06 is to be 16.09, then the tag set on master after the pulling of stable/1606 would be v16.09-rc0
- If the next release is 16.06 then the first tag on the branch stable/1606 should be v16.06-rc1
- Note: that first tag on stable/1606 should be set on the first commit to stable/1606 that is *not* a commit on master. This is to avoid issues with mis-picking of tags if both are on the same commit (one shared between master and stable/1606).
- Identify the commit you wish to tag & Check out that commit
- Lay the annotated (and preferably signed) tag locally
- Test locally using build-root/scripts/version
- Push tag to gerrit
- Verify the tag remotely
Typically (but not always), you will want to check out the HEAD of the branch you are laying a tag on.
Example:
git checkout stable/1606
and make sure its up to date:
git pull
Lay the annotated (and preferably signed) tag locally
If you are going to lay a signed tag:
git tag -s ${tagname} -m ${tag annotation}
If you are going to lay an unsigned annotated tag:
git tag -a ${tagname} -m ${tag annotation}
Examples:
For a tag for stable/1606 for RC2 (signed):
git tag -s v16.06-rc2 -m "Version 16.06-rc2"
For a tag on stable/1606 for RC2 (unsigned):
git tag -a v16.06-rc2 -m "Version 16.06-rc2"
First verify your tag is as you expect it:
git show ${tagname}
Example:
git show v16.06-rc2
Then run
src/scripts/version
which should return
${tagname suppressing the leading 'v'}
In our example:
16.06-rc2
git push origin ${tag}
NOTE: this is an "emergency" procedure and only recommended if necessary (like in the case of a release where there is a commit required after the release tag was created). If you need to move a tag forward, simply delete the existing tag, then create the new one per the above Mechanics of Tagging procedure.
Make sure to delete tag from both the local and remote repo.
git tag -d <tagname>
git push origin :refs/tags/<tagname>
The above procedure most probably will not work with Gerrit, with the following diagnostic:
ubuntu@vpp-dev:~/vpp$ git push origin :refs/tags/v20.09
Username for 'https://gerrit.fd.io': ayourtch
Password for 'https://[email protected]':
remote: error: branch refs/tags/v20.09:
remote: You need 'Delete Reference' rights or 'Push' rights with the
remote: 'Force Push' flag set to delete references.
remote: User: ayourtch
remote: Contact an administrator to fix the permissions
remote: Processing changes: refs: 1, done
To https://gerrit.fd.io/r/vpp
! [remote rejected] v20.09 (prohibited by Gerrit: not permitted: delete)
error: failed to push some refs to 'https://gerrit.fd.io/r/vpp'
ubuntu@vpp-dev:~/vpp$
If that happens, go to gerrit GUI listing the tags here: https://gerrit.fd.io/r/admin/repos/vpp,tags - you should have the permissions to delete the tag from the GUI. Wait for the git.fd.io to show that the tag has disappeared, to ensure no inconsistencies for the jobs.
- VPP-ABF
- VPP API Concepts
- VPP API Versioning
- VPP-ApiChangeProcess
- VPP-ArtifactVersioning
- VPP-BIER
- VPP-Bihash
- VPP-BugReports
- VPP Build System Deep Dive
- VPP Build, Install, And Test Images
- VPP-BuildArtifactRetentionPolicy
- VPP-c2cpel
- VPP-CodingTips
- VPP Command Line Arguments
- VPP Command Line Interface CLI Guide
- VPP-CommitMessages
- VPP-CommitterTasks-ApiFreeze
- VPP CommitterTasks Compare API Changes
- VPP-CommitterTasks-CutPointRelease
- VPP-CommitterTasks-CutRelease
- VPP-CommitterTasks-FinalReleaseCandidate
- VPP-CommitterTasks-PullThrottleBranch
- VPP-CommitterTasks-ReleasePlan
- VPP Configure An LW46 MAP E Terminator
- VPP Configure VPP As A Router Between Namespaces
- VPP Configure VPP TAP Interfaces For Container Routing
- VPP-CoreFileMismatch
- VPP-cpel
- VPP-cpeldump
- VPP-DHCPv6
- VPP-DistributedOwnership
- VPP DPOs And Feature Arcs
- VPP EC2 Instance With SRIOV
- VPP-elog
- VPP-FAQ
- VPP Feature Arcs
- VPP-g2
- VPP-HA
- VPP-HostStack
- VPP-HostStack-BuiltinEchoClientServer
- VPP-HostStack-EchoClientServer
- VPP-HostStack-ExternalEchoClientServer
- VPP HostStack Hs Test
- VPP-HostStack-LDP-iperf
- VPP-HostStack-LDP-nginx
- VPP-HostStack-LDP-sshd
- VPP-HostStack-nginx
- VPP-HostStack-SessionLayerArchitecture
- VPP-HostStack-TestHttpServer
- VPP-HostStack-TestProxy
- VPP-HostStack-TLS
- VPP-HostStack-VCL
- VPP-HostStack-VclEchoClientServer
- VPP How To Add A Tunnel Encapsulation
- VPP How To Build The Sample Plugin
- VPP How To Connect A PCI Interface To VPP
- VPP How To Create A VPP Binary Control Plane API
- VPP How To Deploy VPP In EC2 Instance And Use It To Connect Two Different VPCs
- VPP How To Optimize Performance %28System Tuning%29
- VPP How To Use The API Trace Tools
- VPP How To Use The C API
- VPP How To Use The Packet Generator And Packet Tracer
- VPP-Howtos
- VPP Installing VPP Binaries From Packages
- VPP Interconnecting vRouters With VPP
- VPP Introduction To IP Adjacency
- VPP Introduction To N Tuple Classifiers
- VPP-IPFIX
- VPP-IPSec
- VPP IPSec And IKEv2
- VPP-Macswapplugin
- VPP-Meeting
- VPP-MFIB
- VPP Missing Prefetches
- VPP Modifying The Packet Processing Directed Graph
- VPP MPLS FIB
- VPP-NAT
- VPP Per Feature Notes
- VPP Performance Analysis Tools
- VPP-perftop
- VPP Project Meeting Minutes
- VPP Pulling, Building, Running, Hacking And Pushing VPP Code
- VPP Pure L3 Between Namespaces With 32s
- VPP Pure L3 Container Networking
- VPP Pushing And Testing A Tag
- VPP Python API
- VPP-QuickTrexSetup
- VPP Random Hints And Kinks For KVM Usage
- VPP Release Plans Release Plan 26.06
- VPP-RM
- VPP-SecurityGroups
- VPP Segment Routing For IPv6
- VPP Segment Routing For MPLS
- VPP Setting Up Your Dev Environment
- VPP-SNAT
- VPP Software Architecture
- VPP STN Testing
- VPP The VPP API
- VPP Training Events
- VPP-Troubleshooting
- VPP-Troubleshooting-BuildIssues
- VPP-Troubleshooting-Vagrant
- VPP Tutorial DPDK And MacSwap
- VPP-Tutorials
- VPP Use VPP To Chain VMs Using Vhost User Interface
- VPP Use VPP To Connect VMs Using Vhost User Interface
- VPP Using mTCP User Mode TCP Stack With VPP
- VPP Using VPP As A VXLAN Tunnel Terminator
- VPP VPP BFD Nexus
- VPP VPP Home Gateway
- VPP-VPPCommunicationsLibrary
- VPP What Is VPP
- VPP Working With The 16.06 Throttle Branch