Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

OF 0.12.1 Release Checklist #7588

Open
15 of 36 tasks
dimitre opened this issue Aug 7, 2023 · 23 comments
Open
15 of 36 tasks

OF 0.12.1 Release Checklist #7588

dimitre opened this issue Aug 7, 2023 · 23 comments
Milestone

Comments

@dimitre
Copy link
Member

dimitre commented Aug 7, 2023

Complete List - https://github.com/openframeworks/openFrameworks/milestone/27
Just starting a sketch of things that would be nice to work after 0.12 release, feel free to edit / suggest items

general / all

arm

android

  • get android working again

iOS

macOS

msys2

vs

linux

emscripten

After Release

@dimitre dimitre added this to the 0.12.1 milestone Aug 7, 2023
@ofTheo ofTheo pinned this issue Aug 29, 2023
@cjdg
Copy link

cjdg commented Aug 29, 2023

On Ubuntu 23.04, cannot install libopenal-dev, libopenal1 (= 1:1.19.1-2build3) pero 1:1.22.2-0ubuntu1~22.04.sav0 cannot be installed

@ofTheo
Copy link
Member

ofTheo commented Aug 29, 2023

hmm that's strange @cjdg - I can see it here:
https://launchpad.net/ubuntu/lunar/+package/libopenal-dev

did you try:
sudo apt-get upgrade

to upgrade the packages on your system?

sometimes I find aptitude can handle these installs better.

sudo apt-get install aptitude
sudo aptitude install libopenal-dev 

@artificiel
Copy link
Contributor

artificiel commented Aug 31, 2023

on my list:

misc #7620 #7621 #6939 #7565 #7271 #7130 #7031 #5598 #7122
install from GitHub streamline #7606 + #7607 + #7609
iOS stuff #6975
deprecate cleanup #1550
default to release #1022

also revisit #7352 -> we need a simple, easy to use 2023 method of styling the code (right now the core is inconstant and should be cleaned up) -> I vote for clangformat and simply adopt the webkit flavour. (some of the details of https://github.com/openframeworks/openFrameworks/wiki/oF-Code-Style are a bit opinionated and there is not much value to carry idiosyncrasies, especially at the cost of "maintaining" a custom style guide).

(also: can close #7016 #1748 #1966 #7414 #7517)

edit to add: expunge srand()
edit to add: fmtlib (-> std::format C++20 (0.13?))

@dimitre
Copy link
Member Author

dimitre commented Aug 31, 2023

This one is a personal favorite to be discussed and maybe solved

@dimitre
Copy link
Member Author

dimitre commented Aug 31, 2023

One thing to plan for next release is if it will be compatible for c++14 or c++11 yet.
I think it is good ot make another release backwards compatible before start incorporating c++17 exclusive on the core.
This way we can get @danoli3 huge PR goodies in macOS 10.14 or earlier. what do you think ?

@ofTheo
Copy link
Member

ofTheo commented Aug 31, 2023

I'm leaning towards c++17 only for the next release, with no boost.
Apothecary has sucked up so much time for me and for others - the smaller the dependency list the better.

For OF we have always tried to support the last three versions of macOS and so that would be macOS 13, 12, 11 now.
10.14 is really out of date at this point.

People can also use 0.12.0 if they need < c++17.
Are you still on 10.14 @dimitre ? 🙂

Edit: that said maybe next release is 0.13.0 and 0.12.1 is a patch-fix release only if needed.

@artificiel
Copy link
Contributor

I'm a bit confused I was under the impression that 0.12 was C++17 (namely std::filesystem, and also some constructs).

In any case i agree that moving forward is the correct course of action, but it would be preemptive vs "long term support" good to document an upfront compatibility list, matching OF "epochs" to OS versions.

I don't know about other platforms -- no windows, and on the linux side I'm with arch which is rolling and does not have a concept of version.

@ofTheo
Copy link
Member

ofTheo commented Sep 1, 2023

@artificiel that is correct but it does currently rollback to C++11 / 14 and uses boosts filesystem if C++17 filesystem is not available.

See: https://github.com/openframeworks/openFrameworks/blob/master/libs/openFrameworks/utils/ofConstants.h#L487

If we dropped boost from apothecary / OF then we would be saying you have to have full C++17 in your compiler to build going forward.

@danoli3
Copy link
Member

danoli3 commented Sep 1, 2023

Awesome yes yes! Okay deployment time, I'll summon the merge this week

@NickHardeman
Copy link
Contributor

This one is a personal favorite to be discussed and maybe solved

@dimitre Yes! I can add this to my list. :) Would love some more input on how ofSetColor(int c); should be handled.

@Jonathhhan
Copy link
Contributor

Maybe implement webMIDI for Emscripten?
#7259
Its already working, but I guess my implementation is not perfect ;)

@dimitre
Copy link
Member Author

dimitre commented Oct 6, 2023

We can assign open issues from older milestones too, if they are pertinent to this release
https://github.com/openframeworks/openFrameworks/milestones

@artificiel
Copy link
Contributor

if I may allow myself to refer to #7320

TLDR my take is that releases should be as small and frequent as possible while being meaningful in one way (i.e. a certain central feature is structuring the release, and along with it comes a bunch of fixes, tweaks, etc.).

so I would turn your question around and instead of thinking of more stuff, I would look at what's the major thing in "12.1" and draw a line around that.

it is a break from semver, but as stated in the discussion above, proper semver creates overhead and pressure which does not really make sense for a toolkit as OF which will be forever in develop (reacting to the evolution of the platforms, IDEs, C++, concepts, etc). 1.0 is a wet dream with little purpose.

instead of building an arbitrary, hard-to-estimate and impossible-to-manage "todo list" that defines a future release, work can be published as it accumulates. (it is not really "original" in thinking as such; the strict semver requirements of course have their use, but it applies better to dependencies (where you blindly include/upgrade a library) and takes for granted that you have the ressources to administer the process). it is simpler to consider the branch and determine "that's an interesting lump" and produce 2023.10. keeping things fresh and up to date across a bunch of platforms has inherent value, at least as much as maintaining backward-compat (specifically if the idea is to embark fresh users, and not just cater to old-timers getting their 007 projects out of their EZ135 backups).

OF should not burden itself with administration. we see in the issues a lot of goodwill with tagging categories etc, as well as attempts to "organize" things, but entropy wins against such efforts because deep down the users-developers that want to contribute to OF-core must at some point make the active decision to allocate a part of their budget of brain-calories, and that comes out of one's other ongoing projects. it is one thing to "synergize" development momentum; it is another to end up with a task list that keeps growing.

@ofTheo
Copy link
Member

ofTheo commented Oct 7, 2023

OF should not burden itself with administration. we see in the issues a lot of goodwill with tagging categories etc, as well as attempts to "organize" things,

Ha - so true! :)

Yeah, I think at the very least we should aim for nightly being considered the best one to use and normalize people working with nightly / latest.

@artificiel
Copy link
Contributor

normalize people working with nightly / latest.

a rolling-release approach is certainly a possibility! I see 2 things to consider if that's going to happen:

  1. probably a fair amount of regular yet non-developer users would get on such a git-latest if it's made simple and safe to do so, as it might be a bit of a pain to constantly re-download the whole nightlies as a package and fiddle with PG to refresh projects (or rename/replace directories, etc). in order to maintain a bit of coherence there (and also get all the tests passed "in private"), the PRs should be buffered in a form of "develop" branch (or perhaps "bleeding" as I recently noticed in apothecary). Then merged to main/stable/latest to produce the packages and clear the slab.

  2. there is still a need for "reference" (or perhaps kind of "LTS"?) releases, specifically for workshops/teaching context where it should be simple to base work on a specific version of OF. I guess that's what I'm thinking of in terms of "releases": a point in time that marks a fair amount of done work, that gets tagged and archived when the timing is right. 2-3 times a year would be plenty.

[also, when I criticize semver it's not about number-dot-number scheme itself, but the focus about API breakage and dispatching changes/fixes/etc in major/minor/patches. In a continuous (and ostensibly chaotic) development process with so many loosely-coupled components as OF, the X.Y numbers mostly mean "a bigger chunk of changes" vs "a smaller chunk of changes" which requires an active "decision" to quantify... that's where i personally see a gain in simplicity with year-as-base-id — OF2023.2 is just "that year's second release" (and incidentally it instantly conveys more information about the context (contemporary OS/etc) than a numbered release).]

@artificiel
Copy link
Contributor

artificiel commented Oct 9, 2023

Some considerations on a rolling release workflow — @ofTheo says "get people to nightly/latest". To that effect, the name "latest" seems the friendliest. To summarize:

CI nightlies pop out of the develop/bleeding branch (where the action is the equivalent of the actual master/nightly one). The main (default) git branch becomes "latest", which is merged regularly from develop/bleeding, and produces curated "latest" packages as needed (probably not everyday). (*note that maybe also a better use of feature branches should be considered, but it's a diagonal discussion and non-blocking as long as there is a "buffer" branch before the end consumer).

Users wishing to track with git will get updated to latest as they pull (and not get totally bleeding stuff or caught in a string of interdependent PRs), and users looking for a binary release will be oriented to get OF-latest. Users-developers can track develop if they wish.

Super!

The drawback to that workflow is for users getting OF through a packaged download: they will get "latest", which is fine initially. But then, what is the process for a user who got of-latest-20231012 and want to update to latest-latest 20 days later? (note: this is not different from upgrading the current packaged releases, only there is a difference between "an occasional upgrade event" and "a constant process")

  1. drop-replace their OF in-place (being careful with stuff in apps/myApps and addons... dangerous)

  2. Install newest-latest besides older-latest and move/copy over their work and addons (needs to be careful as to "which version" contains their up-to-date work... less dangerous but error-prone, and boring if done often)

  3. keep their projects out of OF and drop-replace OF in-place so PG is not required (a bit fragile, is not following the current "natural" ofApps default, and addons are still an issue) — this would be the behaviour with a platform-package-manager providing OF (homebrew, AUR, etc).

  4. keep their projects out of OF and keep different versions of OF (safe thing to do to easily rollback), copy addons around, and "re-associate" with PG.

None of the above are particularly smooth...

Some thoughts (to reiterate: I am thinking here of the "official documented workflow", with in mind a fresh, non-terminal-savvy user that has not necessarily yet committed to dive deep at-all-costs into OF):

  • is ofApp/myApps still the correct approach? (it's the most dangerous aspect of overwriting -- if by defaults projects are out of OF, it simplifies the problem).

  • Is it possible to "upgrade" a binary release to track git? So once you got hold of a release, you "git pull" to track latest? (Something will also need to facilitate download_libs). Maybe an "update OF" button in the OF tab of PG so it can be done terminal-less?

  • Or maybe it's not git but a new script "update OF"?, that does something more intelligent with the latest package download (to not overwrite addons and apps/myApp)? Maybe CMake and the work done around it can help on that side?

  • Or maybe (for now) telling someone to "upgrade to the latest" is still a relatively exceptional troubleshooting event? which means the default install-upgrade workflow stays based on less frequent "LTS" releases (with the same upgrade problem, but not expected to be as often). and users-consumers wishing to be on latest need to learn to be git-based (like it's already possible, but with a clearer policy to track latest vs develop).

@dimitre
Copy link
Member Author

dimitre commented Dec 12, 2023

I would love an end of year version 0.12.1
The CFLAGS projectGenerator fix is enough for "unrecommend" 0.12.0

@ofTheo
Copy link
Member

ofTheo commented Dec 12, 2023

🙂- yeah lots of stuff since 0.12.0
Would love to to get a 0.12.1 out. @danoli3 is there anything with apothecary bleeding you could use a hand on? its looking really close. 💪

https://github.com/openframeworks/apothecary/releases/tag/bleeding

image

@artificiel
Copy link
Contributor

if we are closing in I would like to petition for #7736 (critical, as we want the random distributions interface to be as close to "done" as possible (I've been using it regularity so I know it works but I'm still expecting to have to be reactive as people throw random things in the templated interface...)).

also minor, but tighten things: #7755 and #7740

and tangential and probably belongs in ofSite but: how do we get https://openframeworks.cc/documentation/ to be refreshed? the front page says it refers to 12.0 but most source is 5-7 years old and refers to 10.0 ex: https://github.com/openframeworks/ofSite/tree/master/documentation/utils

@artificiel
Copy link
Contributor

also, I know there are efforts floating around and I don't know what actual "work" it means to wrap things but getting proper/explicit simulator support back for iOS would be an interesting 12.1 target.

@danomatika
Copy link
Contributor

danomatika commented Dec 13, 2023 via email

@danoli3
Copy link
Member

danoli3 commented Dec 14, 2023

Users wishing to track with git will get updated to latest as they pull (and not get totally bleeding stuff or caught in a string of interdependent PRs), and users looking for a binary release will be oriented to get OF-latest. Users-developers can track develop if they wish.

This can be solved quite easily with a script packaged with binary distributions of openFrameworks to convert the location to a git checkout targeting master. I tested this recently with great success. User can then decide what to do if fetching and discarding local changes and or pulling to latest via their normal git process.

Would love to to get a 0.12.1 out. @danoli3 is there anything with apothecary bleeding you could use a hand on? its looking really close. 💪

Currently diving into validating VS libraries / linking due to the complexities of Windows CRT / Static / Dynamic etc - all has to be in sync and Debug/Release variants where using. Almost there now. Just addons the current battle

It probably involves changing the precompiled library format. From what I remember, the loader can't differnetiate between arm64 for mac and arm64 for iOS. The newer format is more like a bundle.I tried this for a native Obj-C app I have which used liblo built via makefile but I wasn't able to get either the new format to work or trying different ways of building a fat lib via ar etc. In the end, I made a static lib project and just build the C sources manually>

Yes all macOS, iOS, tvOS linking errors are to be completely obliterated shortly. The use of a new xcframework system (not in the latest binary tests on bleeding, as verifying linking / runtime verification, and this change will need some PG changes and xconfig adjustments accordingly ).

The xcframework system lecture here: https://developer.apple.com/documentation/xcode/creating-a-multi-platform-binary-framework-bundle

Code for this can be found here: https://github.com/openframeworks/apothecary/blob/3ddd0a76e13a97b7f4edccd1d1d59a125cbdd7bf/apothecary/apothecary#L1248

function frameworkFormula() {
    LIBS_DIR_REAL=$(realpath $LIBS_DIR)
    if [ ! -e "$LIBS_DIR/$1" ] ; then
        echoVerbose " Nothing to create framework from to merge in lib dest dir: \"$1\""
    else
        rm -rf $LIBS_DIR_REAL/$1/lib/*.xcframework
        echoSuccess " Framework lib dest dir: \"$1\" \"$LIBS_DIR_REAL/$1/lib/$TYPE/\" "
        xcframework_flags=""

        # Loop through each .a file built and make framework
        for file in $(find "$LIBS_DIR_REAL/$1/lib/$TYPE/" -name "*.a"); do
            echo "file $file"
            xcframework_flags+=" -library $file -headers $LIBS_DIR_REAL/$1/include"
        done
        #echoSuccess " flags: \"$1\" \"$xcframework_flags\" "
        xcodebuild -create-xcframework $xcframework_flags -output $LIBS_DIR_REAL/$1/lib/$1.xcframework

    fi
}

Basically once we get stability confirmed for new libraries, as many devs and projects we can throw at them to see what breaks the better

@danomatika
Copy link
Contributor

danomatika commented Dec 14, 2023 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants