feat(publisher): add snapcraft publisher
This commit is contained in:
Родитель
86f987d7ac
Коммит
c5b7d0d7f3
|
@ -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);
|
||||
});
|
||||
};
|
Загрузка…
Ссылка в новой задаче