* Packages must explicitly declare which symbols they export with`api.export`.
Another idea: in Atmosphere allow a package author to annotate which versions of Meteor a particular version of a package has been tested and is expected to work with.
--
For example, I could say that my package version 1.0.1 works with Meteor 0.6.4, 0.6.4.1, and 0.6.5-rc15.One place to put this would be in the smart.json file, maybe something like this:{"name": "foobar","version": "1.0.1","supports": {"meteor": ["0.6.4", "0.6.4.1", "0.6.5-rc15"]}}
But I think the easiest approach is simply to have Travis CI tests and
some way that when a new release of Meteor is done, package is
retested against it.
But I think the easiest approach is simply to have Travis CI tests and
some way that when a new release of Meteor is done, package is
retested against it.These aren't incompatible. If you're lucky enough that automated tests can determine that X works with Y reliably for you, then you can have the test results feed automatically into the "X works with Y" data; otherwise, for packages where that isn't possible or haven't had automated tests written for, one can update that info manually.
--
You received this message because you are subscribed to the Google Groups "meteor-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email to meteor-core...@googlegroups.com.
To post to this group, send email to meteo...@googlegroups.com.
Visit this group at http://groups.google.com/group/meteor-core.
--
You received this message because you are subscribed to the Google Groups "meteor-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to meteor-talk...@googlegroups.com.
I don't see any fundamental reason why you couldn't change the package metadata of an already released package?
Suppose that we already had this feature as of now, and tomorrow 0.6.5 was released. Then you might be annoyed that I haven't yet released a version of the Router that explicitly supports 0.6.5, so you couldn't update your app.
What you could do is fork me on github, test, and add 0.6.5 to the smart.json (and send me a PR!).
As I said, you can always create a test to test versions
If all developers would use versions correctly and write bug-less code, maybe.
On Wednesday, August 14, 2013 12:10:00 AM UTC-4, Tom Coleman wrote:I don't see any fundamental reason why you couldn't change the package metadata of an already released package?Right, you do want to be able to change the metadata (of "X works with Y") of an already released package.But, for the files that make up a particular release of a package, we also want those files to be immutable. That is, if someone installs version 1.2.3 of my package on Monday, and someone else installs version 1.2.3 of my package on Tuesday, the files that they get in their packages directory should be the same. (It gets way too confusing to talk about whether version "1.2.3" has a bug in it or not otherwise).The solution is for the information "1.2.3 works with Meteor 0.6.5" to be stored in the database about 1.2.3 instead of being stored inside of 1.2.3.
Suppose that we already had this feature as of now, and tomorrow 0.6.5 was released. Then you might be annoyed that I haven't yet released a version of the Router that explicitly supports 0.6.5, so you couldn't update your app.There's no reason to prevent someone from using Router version 0.5.3 with Meteor 0.6.5, even if you haven't yet said whether 0.5.3 works with 0.6.5 or not. If someone explicitly lists "router": "0.5.3" as the version they want to use, mrt should go ahead and install that version. At most, print a warning.
What you could do is fork me on github, test, and add 0.6.5 to the smart.json (and send me a PR!).No no no :) If which versions of Meteor a particular version of a package works with is part of the version of a package, this has unpleasant consequences:
- If a new version of Meteor comes out, I have to release a new version of the package, even if it hasn't changed. But I want to keep track of when my package has actually changed: e.g. to be able to say things like "no change was needed for 0.6.5".
- If I make a mistake, and release a package version 1.2.3 that claims to work with Meteor 0.6.1 when in fact it doesn't, the only way for me to fix that mistake is to release a new version of my package. But having a new version of the package doesn't change 1.2.3 mistakenly claiming to work with 0.6.1! So now I can't reliably say "Still using Meteor 0.6.1? The last version that supported 0.6.1 was 1.2.3".
It's natural for me to ask "so, does Router version 0.5.3 work with Meteor 0.6.4.2?" The reason why it's natural for me to ask that is because 0.5.3 could work with 0.6.4.2 if such a patch release came out: we just don't know yet.So, put the "works with" metadata information in the database, not inside the package.
What you could do is fork me on github, test, and add 0.6.5 to the smart.json (and send me a PR!). Then you could change your app's smart.json to:
And use it that way until I get my act together.
3. If we had the other "missing" feature from meteorite/atmosphere, which is "github-style" namespaced packages, then you could publish your own fork of the router to atmosphere, and the above would be even easier.
If Meteor is the platform of the future, I think it needs to implement API compatibility layers like Android does. e.g:
Meteor 0.6.4 uses API 5, automatically exports global variables;
Meteor 0.6.5 uses API 6, requires explicit api.export() calls.
App X specifies a { targetAPI: 5 } in package.js. Meteor notes this while loading, and runs a compatibility layer, which will still export global variables automatically.
Hence, every time Meteor changes the API, ALL apps will continue to run as expected, with NO changes required by every single developer.
Obviously this might be irrelevant for pre-1.0, but I think for 1.0 this should be a priority. My 2 cents :)
For reference, the Android SDK reference on this strategy:
http://developer.android.com/guide/topics/manifest/uses-sdk-element.html
Gadi
--
You received this message because you are subscribed to the Google Groups "meteor-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to meteor-talk...@googlegroups.com.
What if they(do what most people do and) don't specify a version? Does it stop you from upgrading to 0.6.5 ?
I definitely think a file in the git repo has advantages here, cf. forking / PRs etc.
I was imagining you'd just update smart.json to list "meteor: 0.6.4.2" and run `mrt release .` without bumping your package version.
What if they(do what most people do and) don't specify a version? Does it stop you from upgrading to 0.6.5 ?
I definitely think a file in the git repo has advantages here, cf. forking / PRs etc.Right, if you look at GitHub, there are commits which are immutable, and then there are things tied to commits, such as tags. Then there are other things which turn out better not to be tied to commits, such as issues which are tied to repositories instead. (If issues were tried to commits, then I wouldn't be able to add a new issue without making a new commit).So commits are a good place to start, but then sometimes we may think it through and realize that tying something to a commit isn't the best choice. In terms of "X works with Y", the analogy with issues is actually pretty close. I make a release, and then realize that my new version doesn't work with Meteor 0.6.1 anymore. If "works with 0.6.1" is part of the commit, then I don't have a way to say "no wait, that commit actually doesn't work with 0.6.1".
I was imagining you'd just update smart.json to list "meteor: 0.6.4.2" and run `mrt release .` without bumping your package version.Well, that can be confusing in another way... I publish my package 1.2.3, and on GitHub the v1.2.3 tag contains a smart.json that says it works with 0.6.1 but not 0.6.4.2; but if you look at Atmosphere it says that 1.2.3 doesn't work with 0.6.1 and does with 0.6.4.2. The source of the confusion is my putting information in the commit that isn't immutable with the commit, so it'd be better if I didn't put it in the commit in the first place.
What if they(do what most people do and) don't specify a version? Does it stop you from upgrading to 0.6.5 ?Perhaps if I type "meteor update" it could say "of your current packages, the following haven't been certified to work with 0.6.5; do you want proceed?" But for today the simplest thing to do as a first step would be just to be able to see on Atmosphere which packages work with which Meteor versions... :)
Hi!
On Wed, Aug 14, 2013 at 6:05 AM, Gadi Cohen <dra...@wastelands.net> wrote:
If Meteor is the platform of the future, I think it needs to implement API compatibility layers like Android does.
No! Please, really, stop thinking about versions as numbers. This is definitely not the future. Trying to serialize all changes in consequent versions is always problematic.
If API 5 has some feature you are not using and then they upgrade to API 6 because that feature you are not using changed, what do you care about that?
The point I am trying to make here is that API should be discoverable: if my application does tests against your API and everything passes, this means API is compatible and this is all I care about. I don't care about versions, I care about my application being able to speak to your library.
I think the idea is that Meteor will not change so much after 1.0 version. This is why they are changing things now, to try different ideas.
But I doubt all library developers will have time to keep all possible compatibility layers (sometimes they are even not possible!) up to date. I am worried about that. Not so much about changes in Meteor. I am worried more about changes in packages my applications depend on.
Is it fundamentally a bad thing to move such tags on GH? I can see there could be an argument that it is, which case this approach would be bad.
The other big advantage of this information being in the repo is that my app doesn't need to talk to atmosphere to make statements about whether my packages are going to work with a given Meteor version.
I strongly disagree. Clearly it's not problematic, if it's working for 900 million Android devices, which has become the most widely used smartphone OS in the world.