Remmina - The GTK+ Remote Desktop Client  v1.4.33
Remmina is a remote desktop client written in GTK+, aiming to be useful for system administrators and travellers, who need to work with lots of remote computers in front of either large monitors or tiny netbooks. Remmina supports multiple network protocols in an integrated and consistent user interface. Currently RDP, VNC, NX, XDMCP and SSH are supported.
Releasing-a-new-Remmina-version.md
Go to the documentation of this file.
1 # Releasing a new Remmina version
2 
3 This page describe the Remmina release workflow, and the steps needed to tag a new version.
4 
5 ## What is a release?
6 
7 A release is the distribution of the final version or the newest version of a software application.
8 
9 Remmina tries to follow the [Semantic Versioning](https://semver.org/), that means, given a version number MAJOR.MINOR.PATCH, increment the:
10 
11 - MAJOR version when you make incompatible API changes
12 - MINOR version when you add functionality in a backwards compatible manner
13 - PATCH version when you make backwards compatible bug fixes
14 
15 Unfortunately, due to the relatively small number of contributions, we almost always increment the PATCH version, even if we push new features.
16 
17 This is because we are unable to honor the backlog we have for the next MINOR and MAJOR milestones.
18 
19 That said, is not strictly important to get mad about the versioning, but if we can follow the above schema, is better.
20 
21 ## What is a tag?
22 
23 A tag is a pointer to a specific commit, we can have light tags, that can be added and removed as needed and annotated tags.
24 Annotated tags is an unchangeable (nothing is unchangeable ;-) ) par of Git history, and are used on GitLab and GitHub to create a Release.
25 In fact releases are a GitHub, GitLab concept, it doesn't exist in Git, Git knows only about tags and annotated tags.
26 
27 ## So, how it happens, Releasing Remmina?
28 
29 As soon as we agree to release a new version, we have some preparatory tasks to do, and to be sure to don't miss anything, we work on a new branch and submit a merge request.
30 This is the most important point, as on [GitLab](https://gitlab.com/Remmina/Remmina/-/blob/master/.gitlab/merge_request_templates/Remmina%20Release.md) we have a merge request template for the releases. Instructions for generating the changelog can be found [here](https://gitlab.com/Remmina/Remmina/-/wikis/Contribution/HOWTO-generate-the-changelog).
31 
32 1. Review the above-mentioned template, and eventually modify it if you see something wrong or missing (like the list of downstream maintainers)
33 2. Create a new branch starting from the `master` branch, use a name like `rel/v1.4.28`
34 3. Based on the template be sure, working on the new branch, to update the files as indicated.
35 4. Commit with the `-s` git flag to sign your commit, and push to the Remmina repository.
36 5. Create a Merge Request, and wait for feedbacks and pipeline's status.
37 6. Be sure to link the MR to the right milestones and to issues you want to close automatically upon the merge.
38 7. Check the labels, you must have the `release` label and whatever suit this specific version.
39 
40 At this point we have a Merge Request, be sure everything is fine, or ask for a review.
41 
42 While you wait, prepare yourself to create the annotated tag, while you can do it from the command line, here we focus on the GitLab web interface.
43 
44 Open the previous tag, to see it raw, you can edit it (do not save afterwards), this will be useful to cut and paste what is common to all Release we do.
45 
46 For instance, at https://gitlab.com/Remmina/Remmina/-/releases/v1.4.27/edit you will have to copy:
47 
48 ```
49 **ATTENTION New dependencies introduced with v1.3.5 onwards!**
50 
51 * appindicator or ayatana-appindicator is now optional, -DHAVE_LIBAPPINDICATOR=OFF will disable the Remmina system tray icon.
52 * -DWITH_PYTHONLIBS=ON is required for the Python plugin (python3-dev/devel required to build)
53 * pyhoca-cli is needed for the X2Go plugin, -DWITH_X2GO=ON
54 * NX, XDMCP and ST have removed.
55 * Use -DWITH_FREERDP3=ON if you are using the FreeRDP master branch
56 * libsodium is needed to build Remmina.
57 * webkit2gtk3 is needed to build the WWW plugin.
58 * -DWITH_KF5WALLET=ON is a new config option required for the KWallet plugin (and the required kf5wallet libraries to build it).
59 * News can be turned off with -DWITH_NEWS=OFF
60 * gtk-vnc is needed for the VNC plugin for GNOME and KVM, -DWITH_GVNC=ON
61 ```
62 
63 This will have to be updated in case something has been changed. Pay attention to this point because it's used by the downstream maintainer.
64 
65 When the MR is merged, and you have all the blocks you need, [create a new tag](https://gitlab.com/Remmina/Remmina/-/tags/new), in that page you have to give a name to the tag, like `v1.4.28`, and a message, like `Release v1.4.28`.
66 Without that optional message, you will create a lightweight tag, and you won't end-up in a Release.
67 
68 With the new tag, you can [create a Release](https://gitlab.com/Remmina/Remmina/-/releases/new), in that new page, select the corresponding tag, give a title (follow the previous release as the template), add the change log, and push the Big Red Button :-D
69 
70 You are done!!
71 
72 ## And Now What?
73 
74 Many things happen behind the scene, as soon as you tag a new version, many systems should detect the new tag, and start to build a new Remmina version, this is true for most of the distro, the flatpak, the Ubuntu Remmina PPA, and the snap (see after).
75 Still, there are some additional manual steps to take.
76 
77 1. Wait that all the pipelines are finished and submit a new pipeline from the master (needed for the snap)
78 2. When the manual pipeline is finished go to https://snapcraft.io/remmina/releases, and promote the new version from edge to the stable channel.
79 3. Add the new release in [wikidata](https://www.wikidata.org/wiki/Q82148?uselang=en#P348), this is need by some distributions to gather the latest tag.
80 4. Drop a message to the Debian downstream maintainer, at the moment is @mfvescovi
81 
82 To access snapcraft you need developer rights, ask one maintainer to add yourself in the developer list.
83 One time a year you need to refresh the snapcraft authentication token:
84 
85 ```
86 snapcraft export-login --snaps=remmina -
87 ```
88 
89 Better to use dev@remmina.org (ask the password to the maintainers), and set `SNAPCRAFT_LOGIN` in the [CI/CD variables](https://gitlab.com/Remmina/Remmina/-/settings/ci_cd) with the new obtained token.
90 
91 ## Appendix
92 
93 ### Authors' list
94 
95 To get the authors'list I use this git command:
96 
97 ```
98 git log --pretty=format:"%an <%ae>" | sort | uniq -c | sort -rn | sed -e 's/^ *[0-9]\+ //g'
99 ```
100 
101 You just need to tailor it a little bit, for instance I remove duplicated entries for authors that have multiple emails, I move up the most active users, but don't be too strict, it shouldn't take more than a couple of minutes.
102 
103 ### To-Do
104 
105 We should reduce more all the above manual steps, and ideally a Release should happens by itself upon a special merge request, as usual, patches are welcome ;-)
106