-
Notifications
You must be signed in to change notification settings - Fork 295
Use release archives instead of release tags #498
Description
The way releases are handled at the moment are great, but it has a lot of issues and problems
The problems
- We can not have a
.apmignore
file in the repo - If we want to put transpiled/compiled files into the package, we have to commit them into the repo and upgrade them on each change
- We can not support mono repo architectures with this
The solution
Create tar archive (or zip if you prefer) respecting ignore files and counting in files ignored by git repo from the the local version of the publisher. Add a release with the newly created tag and attach that archive with that release.
The release tag should be prefixed by package name, like linter-ruby-v1.1
. The archive name attached to the release should be named package-name.tgz
or package-name.zip
.
When installing a package, check for the latest tag in APM database for that package, if the tag starts with package-name
, try to find release for that tag and download the package file. Otherwise, just download the zip archive of commit as we do now. If we follow this pattern, we would be backward-compatible with the already released packages.
I know the problems I mentioned above do not sound very important, but they are very annoying and very difficult to workaround.
For example @basarat, @blakeembrey and the rest of the atom-typescript
team transpiles the typescript files and keeps them in their repo.
@nmote @ssorallen @bolinfest and the rest of the nuclide team had to create a new github org facebooknuclideapm
and create a repo in it for each package they wanted to publish.
@david-driscoll and the rest of the omnisharp-atom
team also has to transpile typescript files and keep them in the repo.
@devoncarew and the rest of dart-lang
team has to keep transpiled dart
files in their repo.
@steelbrain @Arcanemagus and the rest of linter-eslint
team has to commit transpiled babel files into the repo, because we spawn a child process that requires our files and child processes don't support babel requires