Linux Snap packages
How to build and release a snap package with codemagic.yaml
This guide will illustrate the basic steps necessary for building and publishing your app as a Snap package.
You can find a complete project showcasing these steps in our Sample projects repository.
instance_type: linux_x2in your
codemagic.yaml. See the build machine specification here.
Adding the app to Codemagic
The apps you have available on Codemagic are listed on the Applications page. Click Add application to add a new app.
- If you have more than one team configured in Codemagic, select the team you wish to add the app to.
- Connect the repository where the source code is hosted. Detailed instructions that cover some advanced options are available here.
- Select the repository from the list of available repositories. Select the appropriate project type.
- Click Finish: Add application
In order to use
codemagic.yaml for build configuration on Codemagic, it has to be committed to your repository. The name of the file must be
codemagic.yaml and it must be located in the root directory of the repository. Detailed explanation can be found here.
If you prefer to write your
codemagic.yaml file from scratch, you can start with this minimal configuration.
workflows: sample-workflow: name: Codemagic Sample Workflow max_build_duration: 120 instance_type: mac_mini_m1
codemagic.yamlfile. If you are building for both the Android and iOS, simply enter both workflows as:
workflows: android-workflow-id: name: Android Sample Workflow # ....... # ....... # ....... ios-workflow-id: name: iOS Sample Workflow # ......
Scan for the
codemagic.yaml file by selecting a branch to scan and clicking the Check for configuration file button at the top of the page. Note that you can have different configuration files in different branches.
To set up Snap packaging, create a
snapcraft.yaml file with the necessary configurations according to Snapcraft guide for Flutter or follow the general
Optionally, run the
snapcraft snap command locally to ensure that everything is set up.
You should store the
snapcraft.yaml file in the repository root. Another option is to store
snapcraft.yaml in the
.snap folder that is located in repository root.
Building snap packages
snapcraft snap command in the
scripts section of your
codemagic.yaml file as in the example below. The output of this command is a
.snap artifact that can later be used for publishing to the Snapcraft Snap Store.
workflows: snap-build: name: Snapcraft Build instance_type: linux environment: vars: SNAPCRAFT_BUILD_ENVIRONMENT: host scripts: - name: Create a snap script: | snapcraft snap --output flutter-codemagic-example.snap artifacts: - '**/*.snap'
Additionally, you may want to install the generated
.snap package onto your machine for testing. The package will not be code signed unless you publish it to Snap Store, so you would need to use the
--dangerous flag to install the package without code signing:
snap install your-package.snap --dangerous
SNAPCRAFT_BUILD_ENVIRONMENTenvironment variable to
host. It is required to avoid virtualization. Read more about virtualization options here. Additionally, Snapcraft manages all the dependencies according to
snapcraft.yamlconfiguration. There is no need to include the Flutter version in
Publishing to Snap Store
Snap packages can be published to the Snap Store.
Generate your Snapcraft credentials file by running the following command locally and providing your Snapcraft account username and password:
snapcraft export-login snapcraft-login-credentials
Run the following command and carefully copy/paste the output:
cat snapcraft-login-credentials | base64
Open your Codemagic app settings, and go to the Environment variables tab.
Enter the desired Variable name, e.g.
base64encoded credentials from Step 2. as Variable value.
Enter the variable group name, e.g. snapcraft_credentials. Click the button to create the group.
Make sure the Secure option is selected.
Click the Add button to add the variable.
Add the variable group to your
environment: groups: - snapcraft_credentials
scriptssection, add steps to base64 decode the credentials file, log in to Snapcraft via CLI, build the snap package and release it to the desired channel.
scripts: - name: Authenticate with Snap Store script: | echo $SNAPCRAFT_LOGIN_CREDENTIALS | base64 \ --decode > /home/builder/snapcraft-login-credentials snapcraft login --with /home/builder/snapcraft-login-credentials - name: Create a Snap package script: | snapcraft snap --output flutter-codemagic-example.snap - name: Publish to Snap Store script: | snapcraft upload flutter-codemagic-example.snap --release stable