Browse Source

ufbt: deploying sample ufbt automation for new apps; added `source "ufbt -s env"` for toolchain access (#2648)

hedger 2 years ago
parent
commit
f7dd77795a

+ 6 - 0
SConstruct

@@ -335,3 +335,9 @@ vscode_dist = distenv.Install("#.vscode", distenv.Glob("#.vscode/example/*"))
 distenv.Precious(vscode_dist)
 distenv.Precious(vscode_dist)
 distenv.NoClean(vscode_dist)
 distenv.NoClean(vscode_dist)
 distenv.Alias("vscode_dist", vscode_dist)
 distenv.Alias("vscode_dist", vscode_dist)
+
+# Configure shell with build tools
+distenv.PhonyTarget(
+    "env",
+    "@echo $( ${FBT_SCRIPT_DIR}/toolchain/fbtenv.sh $)",
+)

+ 1 - 0
documentation/fbt.md

@@ -13,6 +13,7 @@ To use `fbt`, you only need `git` installed in your system.
  > However, if you wish to use tools supplied with the toolchain outside `fbt`, you can open an *fbt shell*, with properly configured environment.
  > However, if you wish to use tools supplied with the toolchain outside `fbt`, you can open an *fbt shell*, with properly configured environment.
  >    - On Windows, simply run `scripts/toolchain/fbtenv.cmd`.
  >    - On Windows, simply run `scripts/toolchain/fbtenv.cmd`.
  >    - On Linux & MacOS, run `source scripts/toolchain/fbtenv.sh` in a new shell.
  >    - On Linux & MacOS, run `source scripts/toolchain/fbtenv.sh` in a new shell.
+ >    - You can also type ```. `./fbt -s env` ``` in your shell. (Keep  the "." at the beginning.)
  
  
  If your system is not supported by pre-built toolchain variants or you want to use custom versions of dependencies, you can `set FBT_NOENV=1`. `fbt` will skip toolchain & environment configuration and will expect all tools to be available on your system's `PATH`. *(this option is not available on Windows)*
  If your system is not supported by pre-built toolchain variants or you want to use custom versions of dependencies, you can `set FBT_NOENV=1`. `fbt` will skip toolchain & environment configuration and will expect all tools to be available on your system's `PATH`. *(this option is not available on Windows)*
  
  

+ 3 - 1
scripts/fbt_tools/fbt_apps.py

@@ -9,6 +9,7 @@ from SCons.Action import Action
 from SCons.Builder import Builder
 from SCons.Builder import Builder
 from SCons.Errors import StopError
 from SCons.Errors import StopError
 from SCons.Warnings import WarningOnByDefault, warn
 from SCons.Warnings import WarningOnByDefault, warn
+from SCons.Script import GetOption
 
 
 # Adding objects for application management to env
 # Adding objects for application management to env
 #  AppManager env["APPMGR"] - loads all manifests; manages list of known apps
 #  AppManager env["APPMGR"] - loads all manifests; manages list of known apps
@@ -28,7 +29,8 @@ def LoadAppManifest(env, entry):
         env["APPMGR"].load_manifest(app_manifest_file_path, entry)
         env["APPMGR"].load_manifest(app_manifest_file_path, entry)
         env.Append(PY_LINT_SOURCES=[app_manifest_file_path])
         env.Append(PY_LINT_SOURCES=[app_manifest_file_path])
     except FlipperManifestException as e:
     except FlipperManifestException as e:
-        warn(WarningOnByDefault, str(e))
+        if not GetOption("silent"):
+            warn(WarningOnByDefault, str(e))
 
 
 
 
 def PrepareApplicationsBuild(env):
 def PrepareApplicationsBuild(env):

+ 3 - 0
scripts/fbt_tools/fbt_help.py

@@ -34,6 +34,9 @@ Other:
     firmware_pvs:
     firmware_pvs:
         generate a PVS-Studio report
         generate a PVS-Studio report
 
 
+How to open a shell with toolchain environment and other build tools:
+    In your shell, type "source `./fbt -s env`". You can also use "." instead of "source".
+
 For more targets & info, see documentation/fbt.md
 For more targets & info, see documentation/fbt.md
 """
 """
 
 

+ 9 - 2
scripts/ufbt/SConstruct

@@ -380,8 +380,9 @@ dist_env.Alias("vscode_dist", vscode_dist)
 # Creating app from base template
 # Creating app from base template
 
 
 dist_env.SetDefault(FBT_APPID=appenv.subst("$APPID") or "template")
 dist_env.SetDefault(FBT_APPID=appenv.subst("$APPID") or "template")
+app_template_dir = project_template_dir.Dir("app_template")
 app_template_dist = []
 app_template_dist = []
-for template_file in project_template_dir.Dir("app_template").glob("*"):
+for template_file in app_template_dir.glob("*"):
     dist_file_name = dist_env.subst(template_file.name)
     dist_file_name = dist_env.subst(template_file.name)
     if template_file.name.endswith(".png"):
     if template_file.name.endswith(".png"):
         app_template_dist.append(
         app_template_dist.append(
@@ -397,12 +398,13 @@ for template_file in project_template_dir.Dir("app_template").glob("*"):
                 },
                 },
             )
             )
         )
         )
-
 AddPostAction(
 AddPostAction(
     app_template_dist[-1],
     app_template_dist[-1],
     [
     [
         Mkdir(original_app_dir.Dir("images")),
         Mkdir(original_app_dir.Dir("images")),
         Touch(original_app_dir.Dir("images").File(".gitkeep")),
         Touch(original_app_dir.Dir("images").File(".gitkeep")),
+        # scons' glob ignores .dot directories, so we need to copy .github manually
+        Copy(original_app_dir.Dir(".github"), app_template_dir.Dir(".github")),
     ],
     ],
 )
 )
 dist_env.Precious(app_template_dist)
 dist_env.Precious(app_template_dist)
@@ -440,3 +442,8 @@ else:
         raise UserError(f"Dolphin folder not found: {dolphin_src_dir}")
         raise UserError(f"Dolphin folder not found: {dolphin_src_dir}")
 
 
     dist_env.PhonyTarget("dolphin_ext", Action(missing_dolphin_folder, None))
     dist_env.PhonyTarget("dolphin_ext", Action(missing_dolphin_folder, None))
+
+dist_env.PhonyTarget(
+    "env",
+    "@echo $( ${FBT_SCRIPT_DIR}/toolchain/fbtenv.sh $)",
+)

+ 41 - 0
scripts/ufbt/project_template/app_template/.github/workflows/build.yml

@@ -0,0 +1,41 @@
+name: "FAP: Build for multiple SDK sources"
+# This will build your app for dev and release channels on GitHub. 
+# It will also build your app every day to make sure it's up to date with the latest SDK changes.
+# See https://github.com/marketplace/actions/build-flipper-application-package-fap for more information
+
+on:
+  push:
+    ## put your main branch name under "braches"
+    #branches: 
+    #  - master 
+  pull_request:
+  schedule: 
+    # do a build every day
+    - cron: "1 1 * * *"
+
+jobs:
+  ufbt-build:
+    runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        include:
+          - name: dev channel
+            sdk-channel: dev
+          - name: release channel
+            sdk-channel: release
+          # You can add unofficial channels here. See ufbt action docs for more info.
+    name: 'ufbt: Build for ${{ matrix.name }}'
+    steps:
+      - name: Checkout
+        uses: actions/checkout@v3
+      - name: Build with ufbt
+        uses: flipperdevices/flipperzero-ufbt-action@v0.1.1
+        id: build-app
+        with:
+          sdk-channel: ${{ matrix.sdk-channel }}
+      - name: Upload app artifacts
+        uses: actions/upload-artifact@v3
+        with:
+          # See ufbt action docs for other output variables
+          name: ${{ github.event.repository.name }}-${{ steps.build-app.outputs.suffix }}
+          path: ${{ steps.build-app.outputs.fap-artifacts }}

+ 3 - 0
scripts/ufbt/site_tools/ufbt_help.py

@@ -40,6 +40,9 @@ How to create a new application:
     2. Run `ufbt vscode_dist create APPID=myapp`
     2. Run `ufbt vscode_dist create APPID=myapp`
     3. In VSCode, open the folder and start editing.
     3. In VSCode, open the folder and start editing.
     4. Run `ufbt launch` to build and upload your application.
     4. Run `ufbt launch` to build and upload your application.
+
+How to open a shell with toolchain environment and other build tools:
+    In your shell, type "source `ufbt -s env`". You can also use "." instead of "source".
 """
 """