Skip to content

Commit

Permalink
check: pin flutter version
Browse files Browse the repository at this point in the history
* Introduce a git submodule to pin the version of flutter SDK under
  `vendor/flutter`.
* Use direnv to add `vendor/flutter/bin` to the current PATH so that
  subsequent calls to `flutter` on the shell uses the our pinned
  version of flutter.
* Update instructions to use pinned version of flutter.
* Pin to 18340ea16c of flutter which matches the current lowerbound
version in pubsec.yaml (3.21.0-12.0.pre.26).

NOTE: Users can still choose to opt-out and use their own version of
flutter. This just provides a recommended and tested version on our
CI.
  • Loading branch information
chrisirhc committed Mar 26, 2024
1 parent 9044a9a commit c985ec9
Show file tree
Hide file tree
Showing 7 changed files with 42 additions and 21 deletions.
5 changes: 5 additions & 0 deletions .envrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# This file is used by direnv to setup the environment when entering to
# use vendored flutter SDK.

# Comment out the next line if you want to use your system flutter.
PATH_add vendor/flutter/bin
21 changes: 15 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,26 @@ jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Checkout repository
uses: actions/checkout@v3

- name: Clone Flutter SDK
- name: Checkout flutter submodule
# We can't do a depth-1 clone, because we need the most recent tag
# so that Flutter knows its version and sees the constraint in our
# pubspec is satisfied. It's uncommon for flutter/flutter to go
# more than 100 commits between tags. Fetch 1000 for good measure.
# more than 100 commits between tags. Fetch 1000 for good measure.
# This is also why we don't use the `with submodules` in the
# `checkout` action.
run: |
git clone --depth=1000 https://github.com/flutter/flutter ~/flutter
TZ=UTC git --git-dir ~/flutter/.git log -1 --format='%h | %ci | %s' --date=iso8601-local
echo ~/flutter/bin >> "$GITHUB_PATH"
git submodule update --init --depth 1000
- name: Add vendored flutter to PATH
run: |
echo vendor/flutter/bin >> "$GITHUB_PATH"
- name: Display version (Temporary)
run: |
flutter --version
- name: Download Flutter SDK artifacts (flutter precache)
run: flutter precache --universal
Expand Down
4 changes: 4 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[submodule "vendor/flutter"]
path = vendor/flutter
url = https://github.com/flutter/flutter.git
branch = main
1 change: 1 addition & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,5 @@

// This much more focused automatic fix is helpful, though.
"files.trimTrailingWhitespace": true,
"dart.flutterSdkPaths": ["vendor/flutter"],
}
28 changes: 13 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,26 +92,21 @@ Two specific points to expand on:

### Setting up

1. Follow the [Flutter installation guide](https://docs.flutter.dev/get-started/install)
for your platform of choice.
2. Switch to the latest version of Flutter by running `flutter channel main`
and `flutter upgrade` (see [Flutter version](#flutter-version) below).
1. Install direnv (TBA), and set up its hook.
2. Make sure you have initialized submodules by doing (do
not do `--depth=1` as flutter relies on tags to know its version):

```sh
git submodule update --init
```
3. Ensure Flutter is correctly configured by running `flutter doctor`.
4. Start the app with `flutter run`, or from your IDE.


### Flutter version

While in the beta phase, we use the latest Flutter from Flutter's
main branch. Use `flutter channel main` and `flutter upgrade`.

We don't pin a specific version, because Flutter itself doesn't offer
a way to do so. So far that hasn't been a problem. When it becomes one,
we'll figure it out; there are several tools for this in the Flutter
community. See [issue #15][].

[issue #15]: https://github.com/zulip/zulip-flutter/issues/15

We pin to a particular version of flutter SDK via git submodules in [vendor/flutter/](vendor/flutter/).
If your local checkout of this repository does not have this submodule checked out at the same commit, the build may fail.

### Tests

Expand Down Expand Up @@ -242,13 +237,16 @@ that's a good prompt to do this. We also do this when there's a
new PR merged that we particularly want to take.

To update the version bounds:
* First, make sure you're on the `main` channel, run:
`flutter channel main`.
* Use `flutter upgrade` to upgrade your local Flutter and Dart.
* Update the lower bounds at `environment` in `pubspec.yaml`
to the new versions, as seen in `flutter --version`.
* Run `flutter pub get`, which will update `pubspec.lock`.
* Make a quick check that things work: `tools/check`,
and do a quick smoke-test of the app.
* Commit and push the changes in `pubspec.yaml` and `pubspec.lock`.
* Commit and push the changes in the submodule `vendor/flutter`,
`pubspec.yaml` and `pubspec.lock`.


### Upgrading dependencies
Expand Down
3 changes: 3 additions & 0 deletions analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@
# packages, and plugins designed to encourage good coding practices.
include: package:flutter_lints/flutter.yaml

analyzer:
exclude: [vendor/**]

linter:
# The lint rules applied to this project can be customized in the
# section below to disable rules from the `package:flutter_lints/flutter.yaml`
Expand Down
1 change: 1 addition & 0 deletions vendor/flutter
Submodule flutter added at 18340e

0 comments on commit c985ec9

Please sign in to comment.