{"id":69953,"date":"2022-11-04T15:24:51","date_gmt":"2022-11-04T14:24:51","guid":{"rendered":"https:\/\/zaven.co\/blog\/?p=69953"},"modified":"2025-04-08T19:54:50","modified_gmt":"2025-04-08T17:54:50","slug":"flutter-application-template-with-github-actions","status":"publish","type":"post","link":"https:\/\/zaven.co\/blog\/flutter-application-template-with-github-actions\/","title":{"rendered":"Flutter application template with GitHub Actions"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">Getting started<\/h3>\n\n\n\n<ol class=\"wp-block-list\"><li>Sample application used in this tutorial <a href=\"https:\/\/github.com\/zavenco\/flutter-ci-test\">Flutter CI Test<\/a><\/li><li><a href=\"https:\/\/docs.flutter.dev\/get-started\/test-drive?tab=androidstudio\">Create flutter application<\/a><\/li><li>You can use <a href=\"https:\/\/pub.dev\/packages\/flutter_flavorizr\">flutter_flavorizr<\/a> to generate Android\/iOS flavors. Sample configuration with firebase support can be found in <a href=\"https:\/\/github.com\/zavenco\/flutter-ci-test\/blob\/develop\/pubspec.yaml\">pubspec.yaml<\/a><\/li><\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Create Firebase project<\/h3>\n\n\n\n<ol class=\"wp-block-list\"><li><a href=\"https:\/\/console.firebase.google.com\/\">Here<\/a> you can create Firebase project. Make sure that project belongs to your organization.<\/li><li>Create Firebase apps (one per flavor and platform e.g. Android dev, iOS dev, Android staging, iOS staging etc.) in Firebase overview https:\/\/console.firebase.google.com\/project\/{project_name}\/overview.<br>Follow steps in creator to download config files and add Firebase SDK to flutter app. More details <a href=\"https:\/\/firebase.google.com\/docs\/flutter\/setup\">here<\/a><\/li><li>Create &#8220;alpha-testers&#8221; and &#8220;beta-testers&#8221; groups in Firebase App Distribution.<\/li><\/ol>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\"   src=\"https:\/\/zaven.co\/blog\/wp-content\/uploads\/2022\/11\/firebase_app_id.png\" alt=\"\" class=\"wp-image-69963\" srcset=\"https:\/\/zaven.co\/blog\/wp-content\/uploads\/2022\/11\/firebase_app_id.png 985w, https:\/\/zaven.co\/blog\/wp-content\/uploads\/2022\/11\/firebase_app_id-730x523.png 730w\" sizes=\"auto, (max-width: 985px) 100vw, 985px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Google Play Console<\/h3>\n\n\n\n<ol class=\"wp-block-list\"><li>Create application in <a href=\"https:\/\/play.google.com\/console\/about\/\">Google Play Console<\/a> Make sure that project belongs to your organization.<\/li><li><a href=\"https:\/\/developer.android.com\/studio\/publish\/app-signing#sign-apk\">Generate debug and upload key<\/a><\/li><li>Update signingConfigs and buildTypes in <a href=\"https:\/\/github.com\/zavenco\/flutter-ci-test\/blob\/develop\/android\/app\/build.gradle\">android\/app\/build.gradle<\/a>.<\/li><\/ol>\n\n\n\n<pre title=\"android\/app\/build.gradle\" class=\"wp-block-code\"><code lang=\"\" class=\" line-numbers\">signingConfigs {\n        release {\n            storeFile file(\"upload-key.jks\")\n            keyAlias System.getenv(\"KEYSTORE_KEY_ALIAS\") ?: localProperties.getProperty(\"KEYSTORE_KEY_ALIAS\")\n            keyPassword System.getenv(\"KEYSTORE_KEY_PASSWORD\") ?: localProperties.getProperty(\"KEYSTORE_KEY_PASSWORD\")\n            storePassword System.getenv(\"KEYSTORE_STORE_PASSWORD\") ?: localProperties.getProperty(\"KEYSTORE_STORE_PASSWORD\")\n        }\n        debug {\n            storeFile file(\"${project.rootDir.absolutePath}\/debug.keystore\")\n            keyAlias \"androiddebugkey\"\n            keyPassword \"android\"\n            storePassword \"android\"\n        }\n    }\n\n    buildTypes {\n        release {\n            signingConfig signingConfigs.release\n            minifyEnabled true\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n        debug {\n            signingConfig signingConfigs.debug\n            debuggable true\n            minifyEnabled false\n            multiDexEnabled true\n            testCoverageEnabled false\n        }\n    }<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Google Cloud Platform<\/h3>\n\n\n\n<ol class=\"wp-block-list\"><li>In <a href=\"https:\/\/github.com\/zavenco\/flutter-ci-test\/tree\/develop\/android\">android<\/a> directory execute<br><code>fastlane init<\/code><\/li><li>Add firebase app distribution plugin<br><code>fastlane add_plugin firebase_app_distribution<\/code><\/li><li>Add to <a href=\"https:\/\/github.com\/zavenco\/flutter-ci-test\/blob\/develop\/android\/Gemfile\">Gemfile<\/a> fastlane version e.g.<br><code>gem \"fastlane\", \"=2.200.0\"<\/code><\/li><li>Add to <a href=\"https:\/\/github.com\/zavenco\/flutter-ci-test\/blob\/develop\/android\/fastlane\/Pluginfile\">android\/fastlane\/Pluginfile<\/a> firebase app distribution version e.g.<br><code>gem 'fastlane-plugin-firebase_app_distribution', \"=0.3.2\"<\/code><\/li><li>Copy <a href=\"https:\/\/github.com\/zavenco\/flutter-ci-test\/blob\/develop\/android\/fastlane\/Fastfile\">android\/fastlane\/Fastfile<\/a> from Flutter CI Test to your app<\/li><li>Run <code>gem install bundler -v 2.3.0<\/code> next <code>bundle install<\/code> and add generated <a href=\"https:\/\/github.com\/zavenco\/flutter-ci-test\/blob\/develop\/ios\/Gemfile.lock\">ios\/Gemfile.lock<\/a> to VCS<\/li><li>Setup <a href=\"https:\/\/docs.fastlane.tools\/actions\/supply\/\">fastlane supply<\/a><\/li><li>Provide information about app in Google Play<br><img decoding=\"async\" src=\"https:\/\/onboard-cms.zaven.co\/wp-content\/uploads\/2022\/01\/google_play_set_up.png\" alt=\"\"><\/li><\/ol>\n\n\n\n<p>Enable Google Play Android Developer API in <a href=\"https:\/\/console.cloud.google.com\/apis\/api\/androidpublisher.googleapis.com\/overview\">Google Cloud Platform<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">App Store Connect<\/h3>\n\n\n\n<ol class=\"wp-block-list\"><li>Create App ids (must be the same as you created in Firebase App Distribution) <a href=\"https:\/\/developer.apple.com\/account\/resources\/certificates\/list\">here<\/a>.<\/li><li>Create app in <a href=\"https:\/\/appstoreconnect.apple.com\/apps\">App Store Connect<\/a>.<\/li><li>Create <a href=\"https:\/\/docs.fastlane.tools\/app-store-connect-api\/\">App Store Connect API Key<\/a> and set App Store Connect API variables (GitHub secrets).<\/li><\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">iOS fastlane configuration<\/h3>\n\n\n\n<ol class=\"wp-block-list\"><li>In <a href=\"https:\/\/github.com\/zavenco\/flutter-ci-test\/tree\/develop\/ios\">ios<\/a> directory execute<br><code>fastlane init<\/code><\/li><li>Add firebase app distribution plugin<br><code>fastlane add_plugin firebase_app_distribution<\/code><\/li><li>Add to <a href=\"https:\/\/github.com\/zavenco\/flutter-ci-test\/blob\/develop\/ios\/Gemfile\">Gemfile<\/a> fastlane version e.g.<br><code>gem \"fastlane\", \"=2.200.0\"<\/code><\/li><li>Add to <a href=\"https:\/\/github.com\/zavenco\/flutter-ci-test\/blob\/develop\/ios\/fastlane\/Pluginfile\">ios\/fastlane\/Pluginfile<\/a> firebase app distribution version e.g.<br><code>gem 'fastlane-plugin-firebase_app_distribution', \"=0.3.2\"<\/code><\/li><li>Copy <a href=\"https:\/\/github.com\/zavenco\/flutter-ci-test\/blob\/develop\/ios\/fastlane\/Fastfile\">ios\/fastlane\/Fastfile<\/a> from Flutter CI Test to your app<\/li><li>Set team ID in <a href=\"https:\/\/github.com\/zavenco\/flutter-ci-test\/blob\/develop\/ios\/fastlane\/Appfile\">ios\/fastlane\/Appfile<\/a> Team ID can be found <a href=\"https:\/\/developer.apple.com\/account\/#!\/membership\">here<\/a><\/li><li>Run <code>gem install bundler -v 2.3.0<\/code> next <code>bundle install<\/code> and add generated <a href=\"https:\/\/github.com\/zavenco\/flutter-ci-test\/blob\/develop\/ios\/Gemfile.lock\">ios\/Gemfile.lock<\/a> to VCS<\/li><li>Setup <a href=\"https:\/\/docs.fastlane.tools\/actions\/match\/\">fastlane match<\/a><\/li><\/ol>\n\n\n\n<p>More information about fastlane configuration can be found <a href=\"https:\/\/docs.flutter.dev\/deployment\/cd\">here<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Set required environment variables (GitHub secrets)<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Services accounts <a href=\"https:\/\/firebase.google.com\/docs\/app-distribution\/android\/distribute-fastlane#service-acc-fastlane\">Firebase App Distribution Service Account json key<\/a> currently the same for all flavors<ul><li><code>CI_TEST_FIREBASE_SERVICE_ACCOUNT_PRODUCTION<\/code><\/li><li><code>CI_TEST_FIREBASE_SERVICE_ACCOUNT_STAGING<\/code><\/li><li><code>CI_TEST_FIREBASE_SERVICE_ACCOUNT_DEVELOPMENT<\/code><\/li><\/ul><\/li><li>Firebase application ID (available in Firebase Project settings) <ul><li><code>CI_TEST_ANDROID_FIREBASE_APP_ID_PRODUCTION<\/code><\/li><li><code>CI_TEST_ANDROID_FIREBASE_APP_ID_STAGING<\/code><\/li><li><code>CI_TEST_ANDROID_FIREBASE_APP_ID_DEVELOPMENT<\/code><\/li><li><code>CI_TEST_IOS_FIREBASE_APP_ID_PRODUCTION<\/code><\/li><li><code>CI_TEST_IOS_FIREBASE_APP_ID_STAGING<\/code><\/li><li><code>CI_TEST_IOS_FIREBASE_APP_ID_DEVELOPMENT<\/code><\/li><\/ul><\/li><li>Upload Key (keystore)<ul><li><code>KEYSTORE_KEY_ALIAS<\/code> &#8211; set when generating upload key<\/li><li><code>KEYSTORE_KEY_PASSWORD<\/code> &#8211; set when generating upload key<\/li><li><code>KEYSTORE_STORE_PASSWORD<\/code> &#8211; set when generating upload key<\/li><li><code>UPLOAD_KEYSTORE_FILE<\/code> &#8211; android upload key encoded in base64<\/li><\/ul><\/li><li>Play Store publisher account json key (service account json key generated in setup <a href=\"https:\/\/docs.fastlane.tools\/actions\/supply\/\">fastlane supply<\/a> step)<ul><li><code>CI_TEST_GOOGLE_DEVELOPER_SERVICE_ACCOUNT_ACTOR_FASTLANE<\/code><\/li><\/ul><\/li><li>App store (variables for <a href=\"https:\/\/docs.fastlane.tools\/app-store-connect-api\/\">App Store Connect Api<\/a>, should be set during creating <a href=\"https:\/\/docs.fastlane.tools\/app-store-connect-api\/\">App Store Connect API Key<\/a>)<ul><li><code>APP_STORE_CONNECT_API_KEY_ISSUER_ID<\/code><\/li><li><code>APP_STORE_CONNECT_API_KEY_KEY<\/code><\/li><li><code>APP_STORE_CONNECT_API_KEY_KEY_ID<\/code><\/li><li><code>MATCH_PASSWORD<\/code> &#8211; password to decrypt profiles, created during setup <a href=\"https:\/\/docs.fastlane.tools\/actions\/match\/\">fastlane match<\/a><\/li><li><code>FASTLANE_MATCH_GIT_DEPLOY_KEY<\/code> &#8211; Certificates repository deploy key (read-only), created during setup <a href=\"https:\/\/docs.fastlane.tools\/actions\/match\/\">fastlane match<\/a><\/li><\/ul><\/li><li>API URLs<ul><li><code>CI_TEST_API_URL_PRODUCTION<\/code><\/li><li><code>CI_TEST_API_URL_STAGING<\/code><\/li><li><code>CI_TEST_API_URL_DEVELOPMENT<\/code><\/li><\/ul><\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\"   src=\"https:\/\/zaven.co\/blog\/wp-content\/uploads\/2022\/11\/firebase_app_id-1.png\" alt=\"\" class=\"wp-image-69966\" srcset=\"https:\/\/zaven.co\/blog\/wp-content\/uploads\/2022\/11\/firebase_app_id-1.png 985w, https:\/\/zaven.co\/blog\/wp-content\/uploads\/2022\/11\/firebase_app_id-1-730x523.png 730w\" sizes=\"auto, (max-width: 985px) 100vw, 985px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">GitHub Actions<\/h3>\n\n\n\n<p>GitHub Actions workflows are located in <a href=\".github\/workflows\">.github\/workflows<\/a> directory.<\/p>\n\n\n\n<p>There are 8 workflows:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/github.com\/zavenco\/flutter-ci-test\/blob\/develop\/.github\/workflows\/android-alpha.yml\">android-alpha.yml<\/a> &#8211; Build and deploy android app alpha version<\/li><li><a href=\"https:\/\/github.com\/zavenco\/flutter-ci-test\/blob\/develop\/.github\/workflows\/android-beta.yml\">android-beta.yml<\/a> &#8211; Build and deploy android app beta version<\/li><li><a href=\"https:\/\/github.com\/zavenco\/flutter-ci-test\/blob\/develop\/.github\/workflows\/android-prod.yml\">android-prod.yml<\/a> &#8211; Build and deploy android app prod version<\/li><li><a href=\"https:\/\/github.com\/zavenco\/flutter-ci-test\/blob\/develop\/.github\/workflows\/ios-alpha.yml\">ios-alpha.yml<\/a> &#8211; Build and deploy ios app alpha version<\/li><li><a href=\"https:\/\/github.com\/zavenco\/flutter-ci-test\/blob\/develop\/.github\/workflows\/ios-beta.yml\">ios-beta.yml<\/a> &#8211; Build and deploy ios app beta version<\/li><li><a href=\"https:\/\/github.com\/zavenco\/flutter-ci-test\/blob\/develop\/.github\/workflows\/ios-prod.yml\">ios-prod.yml<\/a> &#8211; Build and deploy ios app prod version<\/li><li><a href=\"https:\/\/github.com\/zavenco\/flutter-ci-test\/blob\/develop\/.github\/workflows\/linter.yml\">linter.yml<\/a> &#8211; Static code analyse in pull requests, uses rules defined in the project in <a href=\"https:\/\/github.com\/zavenco\/flutter-ci-test\/blob\/develop\/analysis_options.yaml\">analysis_options.yaml<\/a><\/li><li><a href=\"https:\/\/github.com\/zavenco\/flutter-ci-test\/blob\/develop\/.github\/workflows\/release-tag.yml\">release-tag.yml<\/a> &#8211; Create git tag for release versions (extract version from <a href=\"https:\/\/github.com\/zavenco\/flutter-ci-test\/blob\/develop\/pubspec.yaml\">pubspec.yaml<\/a> as tag name)<\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Future improvements<\/h4>\n\n\n\n<p>Currently GitHub Actions doesn&#8217;t support environment variables (non-secret) that can be shared between workflows, so environment variables must be set for each workflow e.g.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"properties\" class=\"language-properties\">env:\n  FLUTTER_CHANNEL: 'stable'\n  FLUTTER_VERSION: '2.8.1'\n  JAVA_VERSION: '17.0.1+12'\n  RUBY_VERSION: '3.0.3'\n  BUNDLER_VERSION: '2.3.0'<\/code><\/pre>\n\n\n\n<p><br>There you go. You should be able to create an app template using GitHub Actions yourself now. You&#8217;re welcome to comment this post. I&#8217;ll do my best to answer promptly.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This article explains how to create Flutter application template with GitHub Actions to save yourself time and nerves.<\/p>\n","protected":false},"author":22,"featured_media":69871,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[56,57,152,153,5,1],"tags":[12,156,159,155,157],"class_list":["post-69953","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-android-development","category-ios-development","category-mobile","category-mobile-development","category-tutorials","category-uncategorized","tag-app-development","tag-flutter","tag-flutter-development","tag-github","tag-githubactions"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.8.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Flutter application template with GitHub Actions | Zaven Blog<\/title>\n<meta name=\"description\" content=\"Ever wondered how to create Flutter application template with GitHub Actions? Me too, and I know how to do it now. Follow this guide to learn!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/zaven.co\/blog\/flutter-application-template-with-github-actions\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Flutter application template with GitHub Actions | Zaven Blog\" \/>\n<meta property=\"og:description\" content=\"Ever wondered how to create Flutter application template with GitHub Actions? Me too, and I know how to do it now. Follow this guide to learn!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/zaven.co\/blog\/flutter-application-template-with-github-actions\/\" \/>\n<meta property=\"og:site_name\" content=\"Zaven Blog\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-04T14:24:51+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-04-08T17:54:50+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/zaven.co\/blog\/wp-content\/uploads\/2021\/02\/building-software-development-team.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"640\" \/>\n\t<meta property=\"og:image:height\" content=\"427\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Bartosz Gasztych\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Bartosz Gasztych\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/zaven.co\/blog\/flutter-application-template-with-github-actions\/\",\"url\":\"https:\/\/zaven.co\/blog\/flutter-application-template-with-github-actions\/\",\"name\":\"Flutter application template with GitHub Actions | Zaven Blog\",\"isPartOf\":{\"@id\":\"https:\/\/zaven.co\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/zaven.co\/blog\/flutter-application-template-with-github-actions\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/zaven.co\/blog\/flutter-application-template-with-github-actions\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/zaven.co\/blog\/wp-content\/uploads\/2021\/02\/building-software-development-team.jpg\",\"datePublished\":\"2022-11-04T14:24:51+00:00\",\"dateModified\":\"2025-04-08T17:54:50+00:00\",\"author\":{\"@id\":\"https:\/\/zaven.co\/blog\/#\/schema\/person\/b9084014ee932b73eb91d1025254eb45\"},\"description\":\"Ever wondered how to create Flutter application template with GitHub Actions? Me too, and I know how to do it now. Follow this guide to learn!\",\"breadcrumb\":{\"@id\":\"https:\/\/zaven.co\/blog\/flutter-application-template-with-github-actions\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/zaven.co\/blog\/flutter-application-template-with-github-actions\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/zaven.co\/blog\/flutter-application-template-with-github-actions\/#primaryimage\",\"url\":\"https:\/\/zaven.co\/blog\/wp-content\/uploads\/2021\/02\/building-software-development-team.jpg\",\"contentUrl\":\"https:\/\/zaven.co\/blog\/wp-content\/uploads\/2021\/02\/building-software-development-team.jpg\",\"width\":640,\"height\":427},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/zaven.co\/blog\/flutter-application-template-with-github-actions\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/zaven.co\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Flutter application template with GitHub Actions\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/zaven.co\/blog\/#website\",\"url\":\"https:\/\/zaven.co\/blog\/\",\"name\":\"Zaven Blog\",\"description\":\"Software development blog. Generative AI, web &amp; mobile applications.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/zaven.co\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/zaven.co\/blog\/#\/schema\/person\/b9084014ee932b73eb91d1025254eb45\",\"name\":\"Bartosz Gasztych\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/zaven.co\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/32e1e5f1c369c448819e0da17c6bc7eb?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/32e1e5f1c369c448819e0da17c6bc7eb?s=96&d=mm&r=g\",\"caption\":\"Bartosz Gasztych\"},\"url\":\"https:\/\/zaven.co\/blog\/author\/bartosz-gasztychzaven-pl\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Flutter application template with GitHub Actions | Zaven Blog","description":"Ever wondered how to create Flutter application template with GitHub Actions? Me too, and I know how to do it now. Follow this guide to learn!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/zaven.co\/blog\/flutter-application-template-with-github-actions\/","og_locale":"en_US","og_type":"article","og_title":"Flutter application template with GitHub Actions | Zaven Blog","og_description":"Ever wondered how to create Flutter application template with GitHub Actions? Me too, and I know how to do it now. Follow this guide to learn!","og_url":"https:\/\/zaven.co\/blog\/flutter-application-template-with-github-actions\/","og_site_name":"Zaven Blog","article_published_time":"2022-11-04T14:24:51+00:00","article_modified_time":"2025-04-08T17:54:50+00:00","og_image":[{"width":640,"height":427,"url":"https:\/\/zaven.co\/blog\/wp-content\/uploads\/2021\/02\/building-software-development-team.jpg","type":"image\/jpeg"}],"author":"Bartosz Gasztych","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Bartosz Gasztych","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/zaven.co\/blog\/flutter-application-template-with-github-actions\/","url":"https:\/\/zaven.co\/blog\/flutter-application-template-with-github-actions\/","name":"Flutter application template with GitHub Actions | Zaven Blog","isPartOf":{"@id":"https:\/\/zaven.co\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/zaven.co\/blog\/flutter-application-template-with-github-actions\/#primaryimage"},"image":{"@id":"https:\/\/zaven.co\/blog\/flutter-application-template-with-github-actions\/#primaryimage"},"thumbnailUrl":"https:\/\/zaven.co\/blog\/wp-content\/uploads\/2021\/02\/building-software-development-team.jpg","datePublished":"2022-11-04T14:24:51+00:00","dateModified":"2025-04-08T17:54:50+00:00","author":{"@id":"https:\/\/zaven.co\/blog\/#\/schema\/person\/b9084014ee932b73eb91d1025254eb45"},"description":"Ever wondered how to create Flutter application template with GitHub Actions? Me too, and I know how to do it now. Follow this guide to learn!","breadcrumb":{"@id":"https:\/\/zaven.co\/blog\/flutter-application-template-with-github-actions\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zaven.co\/blog\/flutter-application-template-with-github-actions\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zaven.co\/blog\/flutter-application-template-with-github-actions\/#primaryimage","url":"https:\/\/zaven.co\/blog\/wp-content\/uploads\/2021\/02\/building-software-development-team.jpg","contentUrl":"https:\/\/zaven.co\/blog\/wp-content\/uploads\/2021\/02\/building-software-development-team.jpg","width":640,"height":427},{"@type":"BreadcrumbList","@id":"https:\/\/zaven.co\/blog\/flutter-application-template-with-github-actions\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/zaven.co\/blog\/"},{"@type":"ListItem","position":2,"name":"Flutter application template with GitHub Actions"}]},{"@type":"WebSite","@id":"https:\/\/zaven.co\/blog\/#website","url":"https:\/\/zaven.co\/blog\/","name":"Zaven Blog","description":"Software development blog. Generative AI, web &amp; mobile applications.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/zaven.co\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/zaven.co\/blog\/#\/schema\/person\/b9084014ee932b73eb91d1025254eb45","name":"Bartosz Gasztych","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zaven.co\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/32e1e5f1c369c448819e0da17c6bc7eb?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/32e1e5f1c369c448819e0da17c6bc7eb?s=96&d=mm&r=g","caption":"Bartosz Gasztych"},"url":"https:\/\/zaven.co\/blog\/author\/bartosz-gasztychzaven-pl\/"}]}},"_links":{"self":[{"href":"https:\/\/zaven.co\/blog\/wp-json\/wp\/v2\/posts\/69953","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zaven.co\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zaven.co\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zaven.co\/blog\/wp-json\/wp\/v2\/users\/22"}],"replies":[{"embeddable":true,"href":"https:\/\/zaven.co\/blog\/wp-json\/wp\/v2\/comments?post=69953"}],"version-history":[{"count":7,"href":"https:\/\/zaven.co\/blog\/wp-json\/wp\/v2\/posts\/69953\/revisions"}],"predecessor-version":[{"id":69972,"href":"https:\/\/zaven.co\/blog\/wp-json\/wp\/v2\/posts\/69953\/revisions\/69972"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/zaven.co\/blog\/wp-json\/wp\/v2\/media\/69871"}],"wp:attachment":[{"href":"https:\/\/zaven.co\/blog\/wp-json\/wp\/v2\/media?parent=69953"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zaven.co\/blog\/wp-json\/wp\/v2\/categories?post=69953"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zaven.co\/blog\/wp-json\/wp\/v2\/tags?post=69953"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}