feat(publisher): add snapcraft publisher

This commit is contained in:
Mark Lee 2018-01-29 17:42:12 -08:00 коммит произвёл Mark Lee
Родитель 86f987d7ac
Коммит c5b7d0d7f3
2 изменённых файлов: 36 добавлений и 0 удалений

Просмотреть файл

@ -232,6 +232,7 @@ the JS file method mentioned above then you can use functions normally.
| GitHub Releases - `github` | Makes a new release for the current version (if required) and uploads the make artifacts as release assets | `process.env.GITHUB_TOKEN` - A personal access token with access to your releases <br />`forge.github_repository.owner` - The owner of the GitHub repository<br />`forge.github_repository.name` - The name of the GitHub repository <br />`forge.github_repository.draft` - Create the release as a draft, defaults to `true` <br />`forge.github_repository.prerelease` - Identify the release as a prerelease, defaults to `false` |
| Amazon S3 - `s3` | Uploads your artifacts to the given S3 bucket | `process.env.ELECTRON_FORGE_S3_SECRET_ACCESS_KEY` - Your secret access token for your AWS account _(falls back to the standard `AWS_SECRET_ACCESS_KEY` environment variable)_<br />`forge.s3.accessKeyId` - Your access key for your AWS account _(falls back to the standard `AWS_ACCESS_KEY_ID` environment variable)_<br />`forge.s3.bucket` - The name of the S3 bucket to upload to<br />`forge.s3.folder` - The folder path to upload to inside your bucket, defaults to your application version<br />`forge.s3.public` - Whether to make the S3 upload public, defaults to `false` |
| [Electron Release Server](https://github.com/ArekSredzki/electron-release-server) - `electron-release-server` | Makes a new release for the current version and uploads the artifacts to the correct platform/arch in the given version. If the version already exists no upload will be performed. The channel is determined from the current version. | `forge.electronReleaseServer.baseUrl` - The base URL of your release server, no trailing slash<br />`forge.electronReleaseServer.username` - The username for the admin panel on your server<br />`forge.electronReleaseServer.password` - The password for the admin panel on your server |
| [Snapcraft](https://snapcraft.io/store/) - `snapStore` | Uploads generated Snaps to the Snap Store. | `forge.snapStore.release` - If specified, a comma-separated list of channels to release to. |
For example:
@ -262,6 +263,13 @@ For example:
"password": "no_one_will_guess_this"
}
}
// Snap Store
{
"snapStore": {
"release": "candidate,beta"
}
}
```
## Custom `make` and `publish` targets

Просмотреть файл

@ -0,0 +1,28 @@
import fs from 'fs-extra';
import path from 'path';
import Snapcraft from 'electron-installer-snap/snapcraft';
import asyncOra from '../util/ora-handler';
/**
* `forgeConfig.snapStore`:
* * `release`: comma-separated list of channels to release to
*/
export default async ({ dir, artifacts, forgeConfig }) => {
const snapArtifacts = artifacts.filter(artifact => artifact.endsWith('.snap'));
if (snapArtifacts.length === 0) {
throw 'No snap files to upload!';
}
const snapcraftCfgPath = path.join(dir, '.snapcraft', 'snapcraft.cfg');
if (!await fs.pathExists(snapcraftCfgPath)) {
throw 'Snapcraft config not found!';
}
await asyncOra('Pushing snap to the snap store', async () => {
const snapcraft = new Snapcraft();
await snapcraft.run(dir, 'push', forgeConfig.snapStore, snapArtifacts);
});
};