├── .editorconfig ├── .github ├── helper.py ├── projects.svg ├── renovate.json5 ├── requirements.txt └── workflows │ ├── .java-version │ └── build.yaml ├── .gitignore ├── README.md ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── libs.versions.toml ├── projects.yaml └── settings.gradle /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = tab 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | 11 | [*.yaml] 12 | indent_style = space 13 | -------------------------------------------------------------------------------- /.github/helper.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import subprocess 4 | import sys 5 | import tempfile 6 | import tomlkit 7 | import yaml 8 | 9 | def main(): 10 | if len(sys.argv) <= 1: 11 | print('Argument required') 12 | exit(1) 13 | match sys.argv[1]: 14 | case 'generate': 15 | generate() 16 | case 'patch-toml': 17 | if len(sys.argv) != 6: 18 | print('Incorrect arguments for patch-toml') 19 | patch_toml(sys.argv[2], sys.argv[3], sys.argv[4], sys.argv[5]) 20 | case _: 21 | print('Unknown command:', sys.argv[1]) 22 | exit(1) 23 | 24 | 25 | def patch_toml(project_dir: str, toml_key: str, version_type: str, version_arg: str): 26 | match version_type: 27 | case 'key': 28 | this_toml_path = 'this/libs.versions.toml' 29 | with open(this_toml_path, 'r') as f: 30 | this_toml = tomlkit.parse(f.read()) 31 | version = this_toml['versions'][version_arg] 32 | case 'value': 33 | version = version_arg 34 | case _: 35 | print("Unknown version type:", version_type) 36 | exit(1) 37 | 38 | project_toml_path = project_dir + '/gradle/libs.versions.toml' 39 | with open(project_toml_path, 'r') as f: 40 | project_toml = tomlkit.parse(f.read()) 41 | 42 | if toml_key.startswith('versions.'): 43 | toml_versions_key = toml_key.removeprefix('versions.') 44 | project_toml['versions'][toml_versions_key] = version 45 | elif toml_key.startswith('plugins.'): 46 | toml_plugins_key = toml_key.removeprefix('plugins.') 47 | project_toml['plugins'][toml_plugins_key]['version'] = version 48 | elif toml_key.startswith('libraries.'): 49 | toml_libraries_key = toml_key.removeprefix('libraries.') 50 | project_toml_library = project_toml['libraries'][toml_libraries_key] 51 | if isinstance(project_toml_library, str): 52 | coordinates = project_toml_library.rpartition(':')[0] 53 | new_triple = coordinates + ':' + version 54 | project_toml['libraries'][toml_libraries_key] = new_triple 55 | else: 56 | project_toml_library['version'] = version 57 | else: 58 | print('Unknown TOML key prefix:', toml_key) 59 | exit(1) 60 | 61 | with open(project_toml_path, 'w') as f: 62 | f.write(tomlkit.dumps(project_toml)) 63 | 64 | 65 | def generate(): 66 | with open('projects.yaml', 'r') as y: 67 | projects = yaml.safe_load(y) 68 | 69 | with tempfile.NamedTemporaryFile(mode = 'w', delete = False) as f: 70 | f.write('direction: left\n\n') 71 | 72 | for project, config in projects.items(): 73 | f.write(project + '\n') 74 | 75 | if 'internal_dependencies' in config: 76 | for dep in config['internal_dependencies'].keys(): 77 | f.write(project + ' -> ' + dep + '\n') 78 | 79 | f.close() 80 | 81 | subprocess.run(['d2', '--layout=elk', f.name, '.github/projects.svg']) 82 | 83 | with open('.github/workflows/build.yaml', 'w') as f: 84 | f.write('''name: build 85 | 86 | on: 87 | pull_request: {} 88 | workflow_dispatch: {} 89 | push: 90 | branches: 91 | - 'trunk' 92 | schedule: 93 | # 9:23 AM EST 94 | - cron: "23 13 * * *" 95 | 96 | env: 97 | GRADLE_OPTS: "-Dorg.gradle.jvmargs=-Xmx6g -Dkotlin.incremental=false -Dorg.gradle.daemon=false -Dorg.gradle.vfs.watch=false -Dorg.gradle.logging.stacktrace=full" 98 | 99 | jobs: 100 | workflow-up-to-date: 101 | runs-on: macos-latest 102 | steps: 103 | - uses: actions/checkout@v4 104 | - uses: actions/setup-python@v5 105 | with: 106 | python-version: '3.13' 107 | - run: brew update && brew install d2 108 | - run: pip install -r .github/requirements.txt 109 | - run: .github/helper.py generate 110 | - run: git diff --exit-code 111 | 112 | ''') 113 | 114 | for project, config in projects.items(): 115 | safe_project = project.replace('/', '-') 116 | f.write(' ' + safe_project + ''': 117 | runs-on: macos-latest 118 | if: ${{ !cancelled() }} 119 | ''') 120 | 121 | if 'version' in config: 122 | f.write(''' outputs: 123 | version: ${{ steps.version.outputs.version }} 124 | ''') 125 | 126 | f.write(''' needs: 127 | - workflow-up-to-date 128 | ''') 129 | if 'internal_dependencies' in config: 130 | for dep in config['internal_dependencies']: 131 | safe_dep = dep.replace('/', '-') 132 | f.write(' - ' + safe_dep + '\n') 133 | 134 | f.write(''' steps: 135 | - name: Checkout this repository 136 | uses: actions/checkout@v4 137 | with: 138 | path: this 139 | - name: "Checkout ''' + project + ''' repository" 140 | uses: actions/checkout@v4 141 | with: 142 | repository: ''' + project + ''' 143 | path: ''' + safe_project + '\n') 144 | if 'ref' in config: 145 | f.write(' ref: ' + config['ref'] + '\n') 146 | f.write(''' - uses: actions/setup-java@v4 147 | with: 148 | distribution: 'zulu' 149 | java-version-file: this/.github/workflows/.java-version 150 | - uses: gradle/actions/setup-gradle@v4 151 | - uses: actions/setup-python@v5 152 | with: 153 | python-version: '3.13' 154 | - name: Patch external dependencies 155 | run: | 156 | pip install -r this/.github/requirements.txt 157 | ''') 158 | 159 | if 'external_dependencies' in config: 160 | for dep, key in config['external_dependencies'].items(): 161 | f.write(' this/.github/helper.py patch-toml ' + safe_project + ' ' + key + ' key ' + dep + '\n') 162 | 163 | if 'internal_dependencies' in config: 164 | for dep, key in config['internal_dependencies'].items(): 165 | safe_dep = dep.replace('/', '-') 166 | f.write(' - name: "Download internal dependency ' + dep + '''" 167 | uses: actions/download-artifact@v4 168 | if: ${{ needs.''' + safe_dep + '''.result == 'success' }} 169 | with: 170 | name: ''' + safe_dep + '''-snapshot 171 | path: ~/.m2/repository 172 | - name: "Patch internal dependency ''' + dep + '''" 173 | run: this/.github/helper.py patch-toml ''' + safe_project + ' ' + key + ''' value ${{ needs.''' + safe_dep + '''.outputs.version }} 174 | if: ${{ needs.''' + safe_dep + '''.result == 'success' }} 175 | ''') 176 | 177 | if 'pre_gradle' in config: 178 | f.write(' - name: "Pre-build ' + project + '''" 179 | run: ''' + config['pre_gradle'] + '\n') 180 | f.write(' - name: "Build ' + project + '''" 181 | run: | 182 | cd ''' + safe_project + ''' 183 | git grep -l 'mavenCentral()' 'build.*' '**/build.*' 'settings.*' '**/settings.*' | xargs sed -i "" "s/mavenCentral()/mavenLocal(); mavenCentral()/g" 184 | git diff --patch 185 | ../this/gradlew ''') 186 | if 'pre_build' in config: 187 | f.write(config['pre_build'] + ' ') 188 | if 'version' not in config: 189 | f.write('build') 190 | if 'post_build' in config: 191 | f.write(' ' + config['post_build']) 192 | f.write('\n') 193 | else: 194 | if 'compile_only' in config and config['compile_only']: 195 | f.write('publishToMavenLocal') 196 | else: 197 | f.write('build publishToMavenLocal') 198 | if 'post_build' in config: 199 | f.write(' ' + config['post_build']) 200 | f.write('\n') 201 | 202 | f.write(''' - uses: actions/upload-artifact@v4 203 | with: 204 | name: ''' + safe_project + '''-snapshot 205 | path: ~/.m2/repository 206 | if-no-files-found: error 207 | - id: version 208 | ''') 209 | version = config['version'] 210 | if 'regex' in version: 211 | f.write(''' run: perl -ne '/''' + version['regex'].encode('unicode_escape').decode("utf-8") + '''/ and print "version=$1",$/' ''' + safe_project + '/' + version['file'] + ' >> "$GITHUB_OUTPUT"\n') 212 | else: 213 | raise Exception("Unknown version strategy") 214 | 215 | f.write('\n') 216 | 217 | f.write(''' final-status: 218 | if: ${{ !cancelled() }} 219 | runs-on: ubuntu-latest 220 | needs: 221 | - workflow-up-to-date 222 | ''') 223 | for project in projects.keys(): 224 | safe_project = project.replace('/', '-') 225 | f.write(' - ' + safe_project + '\n') 226 | f.write(''' steps: 227 | - name: Check 228 | run: | 229 | results=$(tr -d '\\n' <<< '${{ toJSON(needs.*.result) }}') 230 | if ! grep -q -v -E '(failure|cancelled)' <<< "$results"; then 231 | echo "One or more required jobs failed" 232 | exit 1 233 | fi 234 | ''') 235 | 236 | 237 | if __name__ == '__main__': 238 | main() 239 | -------------------------------------------------------------------------------- /.github/projects.svg: -------------------------------------------------------------------------------- 1 | cashapp/burstcashapp/coppercashapp/turbinecashapp/licenseesquare/kotlinpoetcashapp/moleculesquare/okhttpsquare/retrofitcashapp/paraphrasecashapp/redwoodsquare/okioJakeWharton/citeJakeWharton/crosswordJakeWharton/dependency-tree-diffJakeWharton/dependency-watchJakeWharton/diffuseJakeWharton/finalization-hookJakeWharton/hardcover-data-syncJakeWharton/kmp-missing-targetsJakeWharton/mosaicJakeWharton/picnicJakeWharton/SaveArchived4PocketJakeWharton/video-swatchsqldelight/Grammar-Kit-Composersqldelight/sql-psi 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | -------------------------------------------------------------------------------- /.github/renovate.json5: -------------------------------------------------------------------------------- 1 | { 2 | $schema: 'https://docs.renovatebot.com/renovate-schema.json', 3 | extends: [ 4 | 'config:recommended', 5 | ], 6 | rebaseWhen: 'behind-base-branch', 7 | ignoreUnstable: false, 8 | respectLatest: false, 9 | separateMinorPatch: true, 10 | separateMultipleMajor: true, 11 | separateMultipleMinor: true, 12 | prConcurrentLimit: 0, 13 | prHourlyLimit: 0, 14 | ignorePresets: [ 15 | // Ensure we get the latest version and are not pinned to old versions. 16 | 'workarounds:javaLTSVersions', 17 | ], 18 | customManagers: [ 19 | // Update .java-version file with the latest JDK version. 20 | { 21 | customType: 'regex', 22 | managerFilePatterns: [ 23 | '/\\.java-version$/', 24 | ], 25 | matchStrings: [ 26 | '(?.*)\\n', 27 | ], 28 | datasourceTemplate: 'java-version', 29 | depNameTemplate: 'java', 30 | // Only write the major version. 31 | extractVersionTemplate: '^(?\\d+)', 32 | }, 33 | ], 34 | packageRules: [ 35 | { 36 | groupName: 'Kotlin and KSP', 37 | matchPackageNames: [ 38 | 'com.google.devtools.ksp:symbol-processing-gradle-plugin', 39 | 'org.jetbrains.kotlin:kotlin-gradle-plugin', 40 | ], 41 | }, 42 | ], 43 | } 44 | -------------------------------------------------------------------------------- /.github/requirements.txt: -------------------------------------------------------------------------------- 1 | pyyaml==6.0.2 2 | tomlkit==0.13.3 3 | -------------------------------------------------------------------------------- /.github/workflows/.java-version: -------------------------------------------------------------------------------- 1 | 22 2 | -------------------------------------------------------------------------------- /.github/workflows/build.yaml: -------------------------------------------------------------------------------- 1 | name: build 2 | 3 | on: 4 | pull_request: {} 5 | workflow_dispatch: {} 6 | push: 7 | branches: 8 | - 'trunk' 9 | schedule: 10 | # 9:23 AM EST 11 | - cron: "23 13 * * *" 12 | 13 | env: 14 | GRADLE_OPTS: "-Dorg.gradle.jvmargs=-Xmx6g -Dkotlin.incremental=false -Dorg.gradle.daemon=false -Dorg.gradle.vfs.watch=false -Dorg.gradle.logging.stacktrace=full" 15 | 16 | jobs: 17 | workflow-up-to-date: 18 | runs-on: macos-latest 19 | steps: 20 | - uses: actions/checkout@v4 21 | - uses: actions/setup-python@v5 22 | with: 23 | python-version: '3.13' 24 | - run: brew update && brew install d2 25 | - run: pip install -r .github/requirements.txt 26 | - run: .github/helper.py generate 27 | - run: git diff --exit-code 28 | 29 | cashapp-burst: 30 | runs-on: macos-latest 31 | if: ${{ !cancelled() }} 32 | outputs: 33 | version: ${{ steps.version.outputs.version }} 34 | needs: 35 | - workflow-up-to-date 36 | steps: 37 | - name: Checkout this repository 38 | uses: actions/checkout@v4 39 | with: 40 | path: this 41 | - name: "Checkout cashapp/burst repository" 42 | uses: actions/checkout@v4 43 | with: 44 | repository: cashapp/burst 45 | path: cashapp-burst 46 | - uses: actions/setup-java@v4 47 | with: 48 | distribution: 'zulu' 49 | java-version-file: this/.github/workflows/.java-version 50 | - uses: gradle/actions/setup-gradle@v4 51 | - uses: actions/setup-python@v5 52 | with: 53 | python-version: '3.13' 54 | - name: Patch external dependencies 55 | run: | 56 | pip install -r this/.github/requirements.txt 57 | this/.github/helper.py patch-toml cashapp-burst libraries.android-gradlePlugin key agp 58 | this/.github/helper.py patch-toml cashapp-burst versions.kotlin key kotlin 59 | this/.github/helper.py patch-toml cashapp-burst libraries.google-ksp key ksp 60 | - name: "Build cashapp/burst" 61 | run: | 62 | cd cashapp-burst 63 | git grep -l 'mavenCentral()' 'build.*' '**/build.*' 'settings.*' '**/settings.*' | xargs sed -i "" "s/mavenCentral()/mavenLocal(); mavenCentral()/g" 64 | git diff --patch 65 | ../this/gradlew kotlinUpgradeYarnLock build publishToMavenLocal 66 | - uses: actions/upload-artifact@v4 67 | with: 68 | name: cashapp-burst-snapshot 69 | path: ~/.m2/repository 70 | if-no-files-found: error 71 | - id: version 72 | run: perl -ne '/VERSION_NAME=(.*)/ and print "version=$1",$/' cashapp-burst/gradle.properties >> "$GITHUB_OUTPUT" 73 | 74 | cashapp-copper: 75 | runs-on: macos-latest 76 | if: ${{ !cancelled() }} 77 | outputs: 78 | version: ${{ steps.version.outputs.version }} 79 | needs: 80 | - workflow-up-to-date 81 | - cashapp-turbine 82 | steps: 83 | - name: Checkout this repository 84 | uses: actions/checkout@v4 85 | with: 86 | path: this 87 | - name: "Checkout cashapp/copper repository" 88 | uses: actions/checkout@v4 89 | with: 90 | repository: cashapp/copper 91 | path: cashapp-copper 92 | - uses: actions/setup-java@v4 93 | with: 94 | distribution: 'zulu' 95 | java-version-file: this/.github/workflows/.java-version 96 | - uses: gradle/actions/setup-gradle@v4 97 | - uses: actions/setup-python@v5 98 | with: 99 | python-version: '3.13' 100 | - name: Patch external dependencies 101 | run: | 102 | pip install -r this/.github/requirements.txt 103 | this/.github/helper.py patch-toml cashapp-copper libraries.android-gradlePlugin key agp 104 | this/.github/helper.py patch-toml cashapp-copper libraries.kotlin-gradlePlugin key kotlin 105 | - name: "Download internal dependency cashapp/turbine" 106 | uses: actions/download-artifact@v4 107 | if: ${{ needs.cashapp-turbine.result == 'success' }} 108 | with: 109 | name: cashapp-turbine-snapshot 110 | path: ~/.m2/repository 111 | - name: "Patch internal dependency cashapp/turbine" 112 | run: this/.github/helper.py patch-toml cashapp-copper libraries.turbine value ${{ needs.cashapp-turbine.outputs.version }} 113 | if: ${{ needs.cashapp-turbine.result == 'success' }} 114 | - name: "Build cashapp/copper" 115 | run: | 116 | cd cashapp-copper 117 | git grep -l 'mavenCentral()' 'build.*' '**/build.*' 'settings.*' '**/settings.*' | xargs sed -i "" "s/mavenCentral()/mavenLocal(); mavenCentral()/g" 118 | git diff --patch 119 | ../this/gradlew build publishToMavenLocal 120 | - uses: actions/upload-artifact@v4 121 | with: 122 | name: cashapp-copper-snapshot 123 | path: ~/.m2/repository 124 | if-no-files-found: error 125 | - id: version 126 | run: perl -ne '/VERSION_NAME=(.*)/ and print "version=$1",$/' cashapp-copper/gradle.properties >> "$GITHUB_OUTPUT" 127 | 128 | cashapp-licensee: 129 | runs-on: macos-latest 130 | if: ${{ !cancelled() }} 131 | outputs: 132 | version: ${{ steps.version.outputs.version }} 133 | needs: 134 | - workflow-up-to-date 135 | - square-kotlinpoet 136 | steps: 137 | - name: Checkout this repository 138 | uses: actions/checkout@v4 139 | with: 140 | path: this 141 | - name: "Checkout cashapp/licensee repository" 142 | uses: actions/checkout@v4 143 | with: 144 | repository: cashapp/licensee 145 | path: cashapp-licensee 146 | - uses: actions/setup-java@v4 147 | with: 148 | distribution: 'zulu' 149 | java-version-file: this/.github/workflows/.java-version 150 | - uses: gradle/actions/setup-gradle@v4 151 | - uses: actions/setup-python@v5 152 | with: 153 | python-version: '3.13' 154 | - name: Patch external dependencies 155 | run: | 156 | pip install -r this/.github/requirements.txt 157 | this/.github/helper.py patch-toml cashapp-licensee versions.agp key agp 158 | this/.github/helper.py patch-toml cashapp-licensee versions.kotlin key kotlin 159 | - name: "Download internal dependency square/kotlinpoet" 160 | uses: actions/download-artifact@v4 161 | if: ${{ needs.square-kotlinpoet.result == 'success' }} 162 | with: 163 | name: square-kotlinpoet-snapshot 164 | path: ~/.m2/repository 165 | - name: "Patch internal dependency square/kotlinpoet" 166 | run: this/.github/helper.py patch-toml cashapp-licensee libraries.kotlinpoet value ${{ needs.square-kotlinpoet.outputs.version }} 167 | if: ${{ needs.square-kotlinpoet.result == 'success' }} 168 | - name: "Build cashapp/licensee" 169 | run: | 170 | cd cashapp-licensee 171 | git grep -l 'mavenCentral()' 'build.*' '**/build.*' 'settings.*' '**/settings.*' | xargs sed -i "" "s/mavenCentral()/mavenLocal(); mavenCentral()/g" 172 | git diff --patch 173 | ../this/gradlew publishToMavenLocal 174 | - uses: actions/upload-artifact@v4 175 | with: 176 | name: cashapp-licensee-snapshot 177 | path: ~/.m2/repository 178 | if-no-files-found: error 179 | - id: version 180 | run: perl -ne '/VERSION_NAME=(.*)/ and print "version=$1",$/' cashapp-licensee/gradle.properties >> "$GITHUB_OUTPUT" 181 | 182 | cashapp-molecule: 183 | runs-on: macos-latest 184 | if: ${{ !cancelled() }} 185 | outputs: 186 | version: ${{ steps.version.outputs.version }} 187 | needs: 188 | - workflow-up-to-date 189 | - cashapp-turbine 190 | - square-okhttp 191 | - square-retrofit 192 | steps: 193 | - name: Checkout this repository 194 | uses: actions/checkout@v4 195 | with: 196 | path: this 197 | - name: "Checkout cashapp/molecule repository" 198 | uses: actions/checkout@v4 199 | with: 200 | repository: cashapp/molecule 201 | path: cashapp-molecule 202 | - uses: actions/setup-java@v4 203 | with: 204 | distribution: 'zulu' 205 | java-version-file: this/.github/workflows/.java-version 206 | - uses: gradle/actions/setup-gradle@v4 207 | - uses: actions/setup-python@v5 208 | with: 209 | python-version: '3.13' 210 | - name: Patch external dependencies 211 | run: | 212 | pip install -r this/.github/requirements.txt 213 | this/.github/helper.py patch-toml cashapp-molecule libraries.android-plugin key agp 214 | this/.github/helper.py patch-toml cashapp-molecule versions.jetbrains-compose key jbCompose 215 | this/.github/helper.py patch-toml cashapp-molecule versions.kotlin key kotlin 216 | - name: "Download internal dependency cashapp/turbine" 217 | uses: actions/download-artifact@v4 218 | if: ${{ needs.cashapp-turbine.result == 'success' }} 219 | with: 220 | name: cashapp-turbine-snapshot 221 | path: ~/.m2/repository 222 | - name: "Patch internal dependency cashapp/turbine" 223 | run: this/.github/helper.py patch-toml cashapp-molecule libraries.turbine value ${{ needs.cashapp-turbine.outputs.version }} 224 | if: ${{ needs.cashapp-turbine.result == 'success' }} 225 | - name: "Download internal dependency square/okhttp" 226 | uses: actions/download-artifact@v4 227 | if: ${{ needs.square-okhttp.result == 'success' }} 228 | with: 229 | name: square-okhttp-snapshot 230 | path: ~/.m2/repository 231 | - name: "Patch internal dependency square/okhttp" 232 | run: this/.github/helper.py patch-toml cashapp-molecule versions.squareup-okhttp value ${{ needs.square-okhttp.outputs.version }} 233 | if: ${{ needs.square-okhttp.result == 'success' }} 234 | - name: "Download internal dependency square/retrofit" 235 | uses: actions/download-artifact@v4 236 | if: ${{ needs.square-retrofit.result == 'success' }} 237 | with: 238 | name: square-retrofit-snapshot 239 | path: ~/.m2/repository 240 | - name: "Patch internal dependency square/retrofit" 241 | run: this/.github/helper.py patch-toml cashapp-molecule versions.squareup-retrofit value ${{ needs.square-retrofit.outputs.version }} 242 | if: ${{ needs.square-retrofit.result == 'success' }} 243 | - name: "Build cashapp/molecule" 244 | run: | 245 | cd cashapp-molecule 246 | git grep -l 'mavenCentral()' 'build.*' '**/build.*' 'settings.*' '**/settings.*' | xargs sed -i "" "s/mavenCentral()/mavenLocal(); mavenCentral()/g" 247 | git diff --patch 248 | ../this/gradlew kotlinUpgradeYarnLock build publishToMavenLocal 249 | - uses: actions/upload-artifact@v4 250 | with: 251 | name: cashapp-molecule-snapshot 252 | path: ~/.m2/repository 253 | if-no-files-found: error 254 | - id: version 255 | run: perl -ne '/VERSION_NAME=(.*)/ and print "version=$1",$/' cashapp-molecule/gradle.properties >> "$GITHUB_OUTPUT" 256 | 257 | cashapp-paraphrase: 258 | runs-on: macos-latest 259 | if: ${{ !cancelled() }} 260 | outputs: 261 | version: ${{ steps.version.outputs.version }} 262 | needs: 263 | - workflow-up-to-date 264 | - square-kotlinpoet 265 | steps: 266 | - name: Checkout this repository 267 | uses: actions/checkout@v4 268 | with: 269 | path: this 270 | - name: "Checkout cashapp/paraphrase repository" 271 | uses: actions/checkout@v4 272 | with: 273 | repository: cashapp/paraphrase 274 | path: cashapp-paraphrase 275 | - uses: actions/setup-java@v4 276 | with: 277 | distribution: 'zulu' 278 | java-version-file: this/.github/workflows/.java-version 279 | - uses: gradle/actions/setup-gradle@v4 280 | - uses: actions/setup-python@v5 281 | with: 282 | python-version: '3.13' 283 | - name: Patch external dependencies 284 | run: | 285 | pip install -r this/.github/requirements.txt 286 | this/.github/helper.py patch-toml cashapp-paraphrase versions.agp key agp 287 | this/.github/helper.py patch-toml cashapp-paraphrase versions.kotlin key kotlin 288 | - name: "Download internal dependency square/kotlinpoet" 289 | uses: actions/download-artifact@v4 290 | if: ${{ needs.square-kotlinpoet.result == 'success' }} 291 | with: 292 | name: square-kotlinpoet-snapshot 293 | path: ~/.m2/repository 294 | - name: "Patch internal dependency square/kotlinpoet" 295 | run: this/.github/helper.py patch-toml cashapp-paraphrase libraries.kotlinPoet value ${{ needs.square-kotlinpoet.outputs.version }} 296 | if: ${{ needs.square-kotlinpoet.result == 'success' }} 297 | - name: "Build cashapp/paraphrase" 298 | run: | 299 | cd cashapp-paraphrase 300 | git grep -l 'mavenCentral()' 'build.*' '**/build.*' 'settings.*' '**/settings.*' | xargs sed -i "" "s/mavenCentral()/mavenLocal(); mavenCentral()/g" 301 | git diff --patch 302 | ../this/gradlew build publishToMavenLocal 303 | - uses: actions/upload-artifact@v4 304 | with: 305 | name: cashapp-paraphrase-snapshot 306 | path: ~/.m2/repository 307 | if-no-files-found: error 308 | - id: version 309 | run: perl -ne '/VERSION_NAME=(.*)/ and print "version=$1",$/' cashapp-paraphrase/gradle.properties >> "$GITHUB_OUTPUT" 310 | 311 | cashapp-redwood: 312 | runs-on: macos-latest 313 | if: ${{ !cancelled() }} 314 | outputs: 315 | version: ${{ steps.version.outputs.version }} 316 | needs: 317 | - workflow-up-to-date 318 | - cashapp-burst 319 | - cashapp-turbine 320 | - square-kotlinpoet 321 | - square-okio 322 | - square-okhttp 323 | steps: 324 | - name: Checkout this repository 325 | uses: actions/checkout@v4 326 | with: 327 | path: this 328 | - name: "Checkout cashapp/redwood repository" 329 | uses: actions/checkout@v4 330 | with: 331 | repository: cashapp/redwood 332 | path: cashapp-redwood 333 | - uses: actions/setup-java@v4 334 | with: 335 | distribution: 'zulu' 336 | java-version-file: this/.github/workflows/.java-version 337 | - uses: gradle/actions/setup-gradle@v4 338 | - uses: actions/setup-python@v5 339 | with: 340 | python-version: '3.13' 341 | - name: Patch external dependencies 342 | run: | 343 | pip install -r this/.github/requirements.txt 344 | this/.github/helper.py patch-toml cashapp-redwood libraries.androidGradlePlugin key agp 345 | this/.github/helper.py patch-toml cashapp-redwood libraries.atomicFuPlugin key atomicfu 346 | this/.github/helper.py patch-toml cashapp-redwood versions.jbCompose key jbCompose 347 | this/.github/helper.py patch-toml cashapp-redwood versions.kotlin key kotlin 348 | this/.github/helper.py patch-toml cashapp-redwood versions.ksp key ksp 349 | - name: "Download internal dependency cashapp/burst" 350 | uses: actions/download-artifact@v4 351 | if: ${{ needs.cashapp-burst.result == 'success' }} 352 | with: 353 | name: cashapp-burst-snapshot 354 | path: ~/.m2/repository 355 | - name: "Patch internal dependency cashapp/burst" 356 | run: this/.github/helper.py patch-toml cashapp-redwood versions.burst value ${{ needs.cashapp-burst.outputs.version }} 357 | if: ${{ needs.cashapp-burst.result == 'success' }} 358 | - name: "Download internal dependency cashapp/turbine" 359 | uses: actions/download-artifact@v4 360 | if: ${{ needs.cashapp-turbine.result == 'success' }} 361 | with: 362 | name: cashapp-turbine-snapshot 363 | path: ~/.m2/repository 364 | - name: "Patch internal dependency cashapp/turbine" 365 | run: this/.github/helper.py patch-toml cashapp-redwood libraries.turbine value ${{ needs.cashapp-turbine.outputs.version }} 366 | if: ${{ needs.cashapp-turbine.result == 'success' }} 367 | - name: "Download internal dependency square/kotlinpoet" 368 | uses: actions/download-artifact@v4 369 | if: ${{ needs.square-kotlinpoet.result == 'success' }} 370 | with: 371 | name: square-kotlinpoet-snapshot 372 | path: ~/.m2/repository 373 | - name: "Patch internal dependency square/kotlinpoet" 374 | run: this/.github/helper.py patch-toml cashapp-redwood libraries.kotlinPoet value ${{ needs.square-kotlinpoet.outputs.version }} 375 | if: ${{ needs.square-kotlinpoet.result == 'success' }} 376 | - name: "Download internal dependency square/okio" 377 | uses: actions/download-artifact@v4 378 | if: ${{ needs.square-okio.result == 'success' }} 379 | with: 380 | name: square-okio-snapshot 381 | path: ~/.m2/repository 382 | - name: "Patch internal dependency square/okio" 383 | run: this/.github/helper.py patch-toml cashapp-redwood versions.okio value ${{ needs.square-okio.outputs.version }} 384 | if: ${{ needs.square-okio.result == 'success' }} 385 | - name: "Download internal dependency square/okhttp" 386 | uses: actions/download-artifact@v4 387 | if: ${{ needs.square-okhttp.result == 'success' }} 388 | with: 389 | name: square-okhttp-snapshot 390 | path: ~/.m2/repository 391 | - name: "Patch internal dependency square/okhttp" 392 | run: this/.github/helper.py patch-toml cashapp-redwood libraries.okhttp value ${{ needs.square-okhttp.outputs.version }} 393 | if: ${{ needs.square-okhttp.result == 'success' }} 394 | - name: "Build cashapp/redwood" 395 | run: | 396 | cd cashapp-redwood 397 | git grep -l 'mavenCentral()' 'build.*' '**/build.*' 'settings.*' '**/settings.*' | xargs sed -i "" "s/mavenCentral()/mavenLocal(); mavenCentral()/g" 398 | git diff --patch 399 | ../this/gradlew kotlinUpgradeYarnLock build publishToMavenLocal -x :redwood-treehouse-host:check 400 | - uses: actions/upload-artifact@v4 401 | with: 402 | name: cashapp-redwood-snapshot 403 | path: ~/.m2/repository 404 | if-no-files-found: error 405 | - id: version 406 | run: perl -ne '/REDWOOD_VERSION = "(.*)"/ and print "version=$1",$/' cashapp-redwood/build-support/src/main/kotlin/app/cash/redwood/buildsupport/RedwoodBuildPlugin.kt >> "$GITHUB_OUTPUT" 407 | 408 | cashapp-turbine: 409 | runs-on: macos-latest 410 | if: ${{ !cancelled() }} 411 | outputs: 412 | version: ${{ steps.version.outputs.version }} 413 | needs: 414 | - workflow-up-to-date 415 | steps: 416 | - name: Checkout this repository 417 | uses: actions/checkout@v4 418 | with: 419 | path: this 420 | - name: "Checkout cashapp/turbine repository" 421 | uses: actions/checkout@v4 422 | with: 423 | repository: cashapp/turbine 424 | path: cashapp-turbine 425 | - uses: actions/setup-java@v4 426 | with: 427 | distribution: 'zulu' 428 | java-version-file: this/.github/workflows/.java-version 429 | - uses: gradle/actions/setup-gradle@v4 430 | - uses: actions/setup-python@v5 431 | with: 432 | python-version: '3.13' 433 | - name: Patch external dependencies 434 | run: | 435 | pip install -r this/.github/requirements.txt 436 | this/.github/helper.py patch-toml cashapp-turbine plugins.kotlin key kotlin 437 | - name: "Build cashapp/turbine" 438 | run: | 439 | cd cashapp-turbine 440 | git grep -l 'mavenCentral()' 'build.*' '**/build.*' 'settings.*' '**/settings.*' | xargs sed -i "" "s/mavenCentral()/mavenLocal(); mavenCentral()/g" 441 | git diff --patch 442 | ../this/gradlew kotlinUpgradeYarnLock build publishToMavenLocal 443 | - uses: actions/upload-artifact@v4 444 | with: 445 | name: cashapp-turbine-snapshot 446 | path: ~/.m2/repository 447 | if-no-files-found: error 448 | - id: version 449 | run: perl -ne '/VERSION_NAME=(.*)/ and print "version=$1",$/' cashapp-turbine/gradle.properties >> "$GITHUB_OUTPUT" 450 | 451 | JakeWharton-cite: 452 | runs-on: macos-latest 453 | if: ${{ !cancelled() }} 454 | outputs: 455 | version: ${{ steps.version.outputs.version }} 456 | needs: 457 | - workflow-up-to-date 458 | steps: 459 | - name: Checkout this repository 460 | uses: actions/checkout@v4 461 | with: 462 | path: this 463 | - name: "Checkout JakeWharton/cite repository" 464 | uses: actions/checkout@v4 465 | with: 466 | repository: JakeWharton/cite 467 | path: JakeWharton-cite 468 | - uses: actions/setup-java@v4 469 | with: 470 | distribution: 'zulu' 471 | java-version-file: this/.github/workflows/.java-version 472 | - uses: gradle/actions/setup-gradle@v4 473 | - uses: actions/setup-python@v5 474 | with: 475 | python-version: '3.13' 476 | - name: Patch external dependencies 477 | run: | 478 | pip install -r this/.github/requirements.txt 479 | this/.github/helper.py patch-toml JakeWharton-cite libraries.android-gradlePlugin key agp 480 | this/.github/helper.py patch-toml JakeWharton-cite versions.kotlin key kotlin 481 | - name: "Build JakeWharton/cite" 482 | run: | 483 | cd JakeWharton-cite 484 | git grep -l 'mavenCentral()' 'build.*' '**/build.*' 'settings.*' '**/settings.*' | xargs sed -i "" "s/mavenCentral()/mavenLocal(); mavenCentral()/g" 485 | git diff --patch 486 | ../this/gradlew kotlinUpgradeYarnLock build publishToMavenLocal 487 | - uses: actions/upload-artifact@v4 488 | with: 489 | name: JakeWharton-cite-snapshot 490 | path: ~/.m2/repository 491 | if-no-files-found: error 492 | - id: version 493 | run: perl -ne '/VERSION_NAME=(.*)/ and print "version=$1",$/' JakeWharton-cite/gradle.properties >> "$GITHUB_OUTPUT" 494 | 495 | JakeWharton-crossword: 496 | runs-on: macos-latest 497 | if: ${{ !cancelled() }} 498 | outputs: 499 | version: ${{ steps.version.outputs.version }} 500 | needs: 501 | - workflow-up-to-date 502 | steps: 503 | - name: Checkout this repository 504 | uses: actions/checkout@v4 505 | with: 506 | path: this 507 | - name: "Checkout JakeWharton/crossword repository" 508 | uses: actions/checkout@v4 509 | with: 510 | repository: JakeWharton/crossword 511 | path: JakeWharton-crossword 512 | - uses: actions/setup-java@v4 513 | with: 514 | distribution: 'zulu' 515 | java-version-file: this/.github/workflows/.java-version 516 | - uses: gradle/actions/setup-gradle@v4 517 | - uses: actions/setup-python@v5 518 | with: 519 | python-version: '3.13' 520 | - name: Patch external dependencies 521 | run: | 522 | pip install -r this/.github/requirements.txt 523 | this/.github/helper.py patch-toml JakeWharton-crossword libraries.kotlinPlugin key kotlin 524 | - name: "Build JakeWharton/crossword" 525 | run: | 526 | cd JakeWharton-crossword 527 | git grep -l 'mavenCentral()' 'build.*' '**/build.*' 'settings.*' '**/settings.*' | xargs sed -i "" "s/mavenCentral()/mavenLocal(); mavenCentral()/g" 528 | git diff --patch 529 | ../this/gradlew kotlinUpgradeYarnLock build publishToMavenLocal 530 | - uses: actions/upload-artifact@v4 531 | with: 532 | name: JakeWharton-crossword-snapshot 533 | path: ~/.m2/repository 534 | if-no-files-found: error 535 | - id: version 536 | run: perl -ne '/VERSION_NAME=(.*)/ and print "version=$1",$/' JakeWharton-crossword/gradle.properties >> "$GITHUB_OUTPUT" 537 | 538 | JakeWharton-dependency-tree-diff: 539 | runs-on: macos-latest 540 | if: ${{ !cancelled() }} 541 | needs: 542 | - workflow-up-to-date 543 | steps: 544 | - name: Checkout this repository 545 | uses: actions/checkout@v4 546 | with: 547 | path: this 548 | - name: "Checkout JakeWharton/dependency-tree-diff repository" 549 | uses: actions/checkout@v4 550 | with: 551 | repository: JakeWharton/dependency-tree-diff 552 | path: JakeWharton-dependency-tree-diff 553 | - uses: actions/setup-java@v4 554 | with: 555 | distribution: 'zulu' 556 | java-version-file: this/.github/workflows/.java-version 557 | - uses: gradle/actions/setup-gradle@v4 558 | - uses: actions/setup-python@v5 559 | with: 560 | python-version: '3.13' 561 | - name: Patch external dependencies 562 | run: | 563 | pip install -r this/.github/requirements.txt 564 | this/.github/helper.py patch-toml JakeWharton-dependency-tree-diff libraries.kotlin-gradle-plugin key kotlin 565 | - name: "Build JakeWharton/dependency-tree-diff" 566 | run: | 567 | cd JakeWharton-dependency-tree-diff 568 | git grep -l 'mavenCentral()' 'build.*' '**/build.*' 'settings.*' '**/settings.*' | xargs sed -i "" "s/mavenCentral()/mavenLocal(); mavenCentral()/g" 569 | git diff --patch 570 | ../this/gradlew build 571 | 572 | JakeWharton-dependency-watch: 573 | runs-on: macos-latest 574 | if: ${{ !cancelled() }} 575 | needs: 576 | - workflow-up-to-date 577 | - square-okhttp 578 | steps: 579 | - name: Checkout this repository 580 | uses: actions/checkout@v4 581 | with: 582 | path: this 583 | - name: "Checkout JakeWharton/dependency-watch repository" 584 | uses: actions/checkout@v4 585 | with: 586 | repository: JakeWharton/dependency-watch 587 | path: JakeWharton-dependency-watch 588 | - uses: actions/setup-java@v4 589 | with: 590 | distribution: 'zulu' 591 | java-version-file: this/.github/workflows/.java-version 592 | - uses: gradle/actions/setup-gradle@v4 593 | - uses: actions/setup-python@v5 594 | with: 595 | python-version: '3.13' 596 | - name: Patch external dependencies 597 | run: | 598 | pip install -r this/.github/requirements.txt 599 | this/.github/helper.py patch-toml JakeWharton-dependency-watch versions.kotlin key kotlin 600 | - name: "Download internal dependency square/okhttp" 601 | uses: actions/download-artifact@v4 602 | if: ${{ needs.square-okhttp.result == 'success' }} 603 | with: 604 | name: square-okhttp-snapshot 605 | path: ~/.m2/repository 606 | - name: "Patch internal dependency square/okhttp" 607 | run: this/.github/helper.py patch-toml JakeWharton-dependency-watch versions.okhttp value ${{ needs.square-okhttp.outputs.version }} 608 | if: ${{ needs.square-okhttp.result == 'success' }} 609 | - name: "Build JakeWharton/dependency-watch" 610 | run: | 611 | cd JakeWharton-dependency-watch 612 | git grep -l 'mavenCentral()' 'build.*' '**/build.*' 'settings.*' '**/settings.*' | xargs sed -i "" "s/mavenCentral()/mavenLocal(); mavenCentral()/g" 613 | git diff --patch 614 | ../this/gradlew build 615 | 616 | JakeWharton-diffuse: 617 | runs-on: macos-latest 618 | if: ${{ !cancelled() }} 619 | outputs: 620 | version: ${{ steps.version.outputs.version }} 621 | needs: 622 | - workflow-up-to-date 623 | - square-okio 624 | steps: 625 | - name: Checkout this repository 626 | uses: actions/checkout@v4 627 | with: 628 | path: this 629 | - name: "Checkout JakeWharton/diffuse repository" 630 | uses: actions/checkout@v4 631 | with: 632 | repository: JakeWharton/diffuse 633 | path: JakeWharton-diffuse 634 | - uses: actions/setup-java@v4 635 | with: 636 | distribution: 'zulu' 637 | java-version-file: this/.github/workflows/.java-version 638 | - uses: gradle/actions/setup-gradle@v4 639 | - uses: actions/setup-python@v5 640 | with: 641 | python-version: '3.13' 642 | - name: Patch external dependencies 643 | run: | 644 | pip install -r this/.github/requirements.txt 645 | this/.github/helper.py patch-toml JakeWharton-diffuse libraries.apkSigner key agp 646 | this/.github/helper.py patch-toml JakeWharton-diffuse libraries.kotlinPlugin key kotlin 647 | - name: "Download internal dependency square/okio" 648 | uses: actions/download-artifact@v4 649 | if: ${{ needs.square-okio.result == 'success' }} 650 | with: 651 | name: square-okio-snapshot 652 | path: ~/.m2/repository 653 | - name: "Patch internal dependency square/okio" 654 | run: this/.github/helper.py patch-toml JakeWharton-diffuse libraries.okio value ${{ needs.square-okio.outputs.version }} 655 | if: ${{ needs.square-okio.result == 'success' }} 656 | - name: "Build JakeWharton/diffuse" 657 | run: | 658 | cd JakeWharton-diffuse 659 | git grep -l 'mavenCentral()' 'build.*' '**/build.*' 'settings.*' '**/settings.*' | xargs sed -i "" "s/mavenCentral()/mavenLocal(); mavenCentral()/g" 660 | git diff --patch 661 | ../this/gradlew build publishToMavenLocal 662 | - uses: actions/upload-artifact@v4 663 | with: 664 | name: JakeWharton-diffuse-snapshot 665 | path: ~/.m2/repository 666 | if-no-files-found: error 667 | - id: version 668 | run: perl -ne '/VERSION_NAME=(.*)/ and print "version=$1",$/' JakeWharton-diffuse/gradle.properties >> "$GITHUB_OUTPUT" 669 | 670 | JakeWharton-finalization-hook: 671 | runs-on: macos-latest 672 | if: ${{ !cancelled() }} 673 | outputs: 674 | version: ${{ steps.version.outputs.version }} 675 | needs: 676 | - workflow-up-to-date 677 | steps: 678 | - name: Checkout this repository 679 | uses: actions/checkout@v4 680 | with: 681 | path: this 682 | - name: "Checkout JakeWharton/finalization-hook repository" 683 | uses: actions/checkout@v4 684 | with: 685 | repository: JakeWharton/finalization-hook 686 | path: JakeWharton-finalization-hook 687 | - uses: actions/setup-java@v4 688 | with: 689 | distribution: 'zulu' 690 | java-version-file: this/.github/workflows/.java-version 691 | - uses: gradle/actions/setup-gradle@v4 692 | - uses: actions/setup-python@v5 693 | with: 694 | python-version: '3.13' 695 | - name: Patch external dependencies 696 | run: | 697 | pip install -r this/.github/requirements.txt 698 | this/.github/helper.py patch-toml JakeWharton-finalization-hook versions.kotlin key kotlin 699 | - name: "Build JakeWharton/finalization-hook" 700 | run: | 701 | cd JakeWharton-finalization-hook 702 | git grep -l 'mavenCentral()' 'build.*' '**/build.*' 'settings.*' '**/settings.*' | xargs sed -i "" "s/mavenCentral()/mavenLocal(); mavenCentral()/g" 703 | git diff --patch 704 | ../this/gradlew build publishToMavenLocal 705 | - uses: actions/upload-artifact@v4 706 | with: 707 | name: JakeWharton-finalization-hook-snapshot 708 | path: ~/.m2/repository 709 | if-no-files-found: error 710 | - id: version 711 | run: perl -ne '/VERSION_NAME=(.*)/ and print "version=$1",$/' JakeWharton-finalization-hook/gradle.properties >> "$GITHUB_OUTPUT" 712 | 713 | JakeWharton-hardcover-data-sync: 714 | runs-on: macos-latest 715 | if: ${{ !cancelled() }} 716 | needs: 717 | - workflow-up-to-date 718 | - square-okhttp 719 | steps: 720 | - name: Checkout this repository 721 | uses: actions/checkout@v4 722 | with: 723 | path: this 724 | - name: "Checkout JakeWharton/hardcover-data-sync repository" 725 | uses: actions/checkout@v4 726 | with: 727 | repository: JakeWharton/hardcover-data-sync 728 | path: JakeWharton-hardcover-data-sync 729 | - uses: actions/setup-java@v4 730 | with: 731 | distribution: 'zulu' 732 | java-version-file: this/.github/workflows/.java-version 733 | - uses: gradle/actions/setup-gradle@v4 734 | - uses: actions/setup-python@v5 735 | with: 736 | python-version: '3.13' 737 | - name: Patch external dependencies 738 | run: | 739 | pip install -r this/.github/requirements.txt 740 | this/.github/helper.py patch-toml JakeWharton-hardcover-data-sync libraries.kotlin-gradlePlugin key kotlin 741 | - name: "Download internal dependency square/okhttp" 742 | uses: actions/download-artifact@v4 743 | if: ${{ needs.square-okhttp.result == 'success' }} 744 | with: 745 | name: square-okhttp-snapshot 746 | path: ~/.m2/repository 747 | - name: "Patch internal dependency square/okhttp" 748 | run: this/.github/helper.py patch-toml JakeWharton-hardcover-data-sync versions.okhttp value ${{ needs.square-okhttp.outputs.version }} 749 | if: ${{ needs.square-okhttp.result == 'success' }} 750 | - name: "Build JakeWharton/hardcover-data-sync" 751 | run: | 752 | cd JakeWharton-hardcover-data-sync 753 | git grep -l 'mavenCentral()' 'build.*' '**/build.*' 'settings.*' '**/settings.*' | xargs sed -i "" "s/mavenCentral()/mavenLocal(); mavenCentral()/g" 754 | git diff --patch 755 | ../this/gradlew build 756 | 757 | JakeWharton-kmp-missing-targets: 758 | runs-on: macos-latest 759 | if: ${{ !cancelled() }} 760 | outputs: 761 | version: ${{ steps.version.outputs.version }} 762 | needs: 763 | - workflow-up-to-date 764 | steps: 765 | - name: Checkout this repository 766 | uses: actions/checkout@v4 767 | with: 768 | path: this 769 | - name: "Checkout JakeWharton/kmp-missing-targets repository" 770 | uses: actions/checkout@v4 771 | with: 772 | repository: JakeWharton/kmp-missing-targets 773 | path: JakeWharton-kmp-missing-targets 774 | - uses: actions/setup-java@v4 775 | with: 776 | distribution: 'zulu' 777 | java-version-file: this/.github/workflows/.java-version 778 | - uses: gradle/actions/setup-gradle@v4 779 | - uses: actions/setup-python@v5 780 | with: 781 | python-version: '3.13' 782 | - name: Patch external dependencies 783 | run: | 784 | pip install -r this/.github/requirements.txt 785 | this/.github/helper.py patch-toml JakeWharton-kmp-missing-targets libraries.android-gradlePlugin key agp 786 | this/.github/helper.py patch-toml JakeWharton-kmp-missing-targets versions.kotlin key kotlin 787 | - name: "Build JakeWharton/kmp-missing-targets" 788 | run: | 789 | cd JakeWharton-kmp-missing-targets 790 | git grep -l 'mavenCentral()' 'build.*' '**/build.*' 'settings.*' '**/settings.*' | xargs sed -i "" "s/mavenCentral()/mavenLocal(); mavenCentral()/g" 791 | git diff --patch 792 | ../this/gradlew publishToMavenLocal 793 | - uses: actions/upload-artifact@v4 794 | with: 795 | name: JakeWharton-kmp-missing-targets-snapshot 796 | path: ~/.m2/repository 797 | if-no-files-found: error 798 | - id: version 799 | run: perl -ne '/VERSION_NAME=(.*)/ and print "version=$1",$/' JakeWharton-kmp-missing-targets/gradle.properties >> "$GITHUB_OUTPUT" 800 | 801 | JakeWharton-mosaic: 802 | runs-on: macos-latest 803 | if: ${{ !cancelled() }} 804 | outputs: 805 | version: ${{ steps.version.outputs.version }} 806 | needs: 807 | - workflow-up-to-date 808 | - JakeWharton-cite 809 | - JakeWharton-finalization-hook 810 | steps: 811 | - name: Checkout this repository 812 | uses: actions/checkout@v4 813 | with: 814 | path: this 815 | - name: "Checkout JakeWharton/mosaic repository" 816 | uses: actions/checkout@v4 817 | with: 818 | repository: JakeWharton/mosaic 819 | path: JakeWharton-mosaic 820 | - uses: actions/setup-java@v4 821 | with: 822 | distribution: 'zulu' 823 | java-version-file: this/.github/workflows/.java-version 824 | - uses: gradle/actions/setup-gradle@v4 825 | - uses: actions/setup-python@v5 826 | with: 827 | python-version: '3.13' 828 | - name: Patch external dependencies 829 | run: | 830 | pip install -r this/.github/requirements.txt 831 | this/.github/helper.py patch-toml JakeWharton-mosaic versions.jetbrains-compose key jbCompose 832 | this/.github/helper.py patch-toml JakeWharton-mosaic versions.kotlin key kotlin 833 | - name: "Download internal dependency JakeWharton/cite" 834 | uses: actions/download-artifact@v4 835 | if: ${{ needs.JakeWharton-cite.result == 'success' }} 836 | with: 837 | name: JakeWharton-cite-snapshot 838 | path: ~/.m2/repository 839 | - name: "Patch internal dependency JakeWharton/cite" 840 | run: this/.github/helper.py patch-toml JakeWharton-mosaic libraries.cite-gradlePlugin value ${{ needs.JakeWharton-cite.outputs.version }} 841 | if: ${{ needs.JakeWharton-cite.result == 'success' }} 842 | - name: "Download internal dependency JakeWharton/finalization-hook" 843 | uses: actions/download-artifact@v4 844 | if: ${{ needs.JakeWharton-finalization-hook.result == 'success' }} 845 | with: 846 | name: JakeWharton-finalization-hook-snapshot 847 | path: ~/.m2/repository 848 | - name: "Patch internal dependency JakeWharton/finalization-hook" 849 | run: this/.github/helper.py patch-toml JakeWharton-mosaic libraries.finalizationHook value ${{ needs.JakeWharton-finalization-hook.outputs.version }} 850 | if: ${{ needs.JakeWharton-finalization-hook.result == 'success' }} 851 | - name: "Build JakeWharton/mosaic" 852 | run: | 853 | cd JakeWharton-mosaic 854 | git grep -l 'mavenCentral()' 'build.*' '**/build.*' 'settings.*' '**/settings.*' | xargs sed -i "" "s/mavenCentral()/mavenLocal(); mavenCentral()/g" 855 | git diff --patch 856 | ../this/gradlew build publishToMavenLocal 857 | - uses: actions/upload-artifact@v4 858 | with: 859 | name: JakeWharton-mosaic-snapshot 860 | path: ~/.m2/repository 861 | if-no-files-found: error 862 | - id: version 863 | run: perl -ne '/VERSION_NAME=(.*)/ and print "version=$1",$/' JakeWharton-mosaic/gradle.properties >> "$GITHUB_OUTPUT" 864 | 865 | JakeWharton-picnic: 866 | runs-on: macos-latest 867 | if: ${{ !cancelled() }} 868 | outputs: 869 | version: ${{ steps.version.outputs.version }} 870 | needs: 871 | - workflow-up-to-date 872 | - JakeWharton-crossword 873 | steps: 874 | - name: Checkout this repository 875 | uses: actions/checkout@v4 876 | with: 877 | path: this 878 | - name: "Checkout JakeWharton/picnic repository" 879 | uses: actions/checkout@v4 880 | with: 881 | repository: JakeWharton/picnic 882 | path: JakeWharton-picnic 883 | - uses: actions/setup-java@v4 884 | with: 885 | distribution: 'zulu' 886 | java-version-file: this/.github/workflows/.java-version 887 | - uses: gradle/actions/setup-gradle@v4 888 | - uses: actions/setup-python@v5 889 | with: 890 | python-version: '3.13' 891 | - name: Patch external dependencies 892 | run: | 893 | pip install -r this/.github/requirements.txt 894 | this/.github/helper.py patch-toml JakeWharton-picnic libraries.kotlinPlugin key kotlin 895 | - name: "Download internal dependency JakeWharton/crossword" 896 | uses: actions/download-artifact@v4 897 | if: ${{ needs.JakeWharton-crossword.result == 'success' }} 898 | with: 899 | name: JakeWharton-crossword-snapshot 900 | path: ~/.m2/repository 901 | - name: "Patch internal dependency JakeWharton/crossword" 902 | run: this/.github/helper.py patch-toml JakeWharton-picnic libraries.crossword value ${{ needs.JakeWharton-crossword.outputs.version }} 903 | if: ${{ needs.JakeWharton-crossword.result == 'success' }} 904 | - name: "Build JakeWharton/picnic" 905 | run: | 906 | cd JakeWharton-picnic 907 | git grep -l 'mavenCentral()' 'build.*' '**/build.*' 'settings.*' '**/settings.*' | xargs sed -i "" "s/mavenCentral()/mavenLocal(); mavenCentral()/g" 908 | git diff --patch 909 | ../this/gradlew kotlinUpgradeYarnLock build publishToMavenLocal 910 | - uses: actions/upload-artifact@v4 911 | with: 912 | name: JakeWharton-picnic-snapshot 913 | path: ~/.m2/repository 914 | if-no-files-found: error 915 | - id: version 916 | run: perl -ne '/VERSION_NAME=(.*)/ and print "version=$1",$/' JakeWharton-picnic/gradle.properties >> "$GITHUB_OUTPUT" 917 | 918 | JakeWharton-SaveArchived4Pocket: 919 | runs-on: macos-latest 920 | if: ${{ !cancelled() }} 921 | needs: 922 | - workflow-up-to-date 923 | - square-retrofit 924 | - square-okhttp 925 | steps: 926 | - name: Checkout this repository 927 | uses: actions/checkout@v4 928 | with: 929 | path: this 930 | - name: "Checkout JakeWharton/SaveArchived4Pocket repository" 931 | uses: actions/checkout@v4 932 | with: 933 | repository: JakeWharton/SaveArchived4Pocket 934 | path: JakeWharton-SaveArchived4Pocket 935 | - uses: actions/setup-java@v4 936 | with: 937 | distribution: 'zulu' 938 | java-version-file: this/.github/workflows/.java-version 939 | - uses: gradle/actions/setup-gradle@v4 940 | - uses: actions/setup-python@v5 941 | with: 942 | python-version: '3.13' 943 | - name: Patch external dependencies 944 | run: | 945 | pip install -r this/.github/requirements.txt 946 | this/.github/helper.py patch-toml JakeWharton-SaveArchived4Pocket libraries.androidGradlePlugin key agp 947 | this/.github/helper.py patch-toml JakeWharton-SaveArchived4Pocket versions.kotlin key kotlin 948 | - name: "Download internal dependency square/retrofit" 949 | uses: actions/download-artifact@v4 950 | if: ${{ needs.square-retrofit.result == 'success' }} 951 | with: 952 | name: square-retrofit-snapshot 953 | path: ~/.m2/repository 954 | - name: "Patch internal dependency square/retrofit" 955 | run: this/.github/helper.py patch-toml JakeWharton-SaveArchived4Pocket versions.retrofit value ${{ needs.square-retrofit.outputs.version }} 956 | if: ${{ needs.square-retrofit.result == 'success' }} 957 | - name: "Download internal dependency square/okhttp" 958 | uses: actions/download-artifact@v4 959 | if: ${{ needs.square-okhttp.result == 'success' }} 960 | with: 961 | name: square-okhttp-snapshot 962 | path: ~/.m2/repository 963 | - name: "Patch internal dependency square/okhttp" 964 | run: this/.github/helper.py patch-toml JakeWharton-SaveArchived4Pocket versions.okhttp value ${{ needs.square-okhttp.outputs.version }} 965 | if: ${{ needs.square-okhttp.result == 'success' }} 966 | - name: "Build JakeWharton/SaveArchived4Pocket" 967 | run: | 968 | cd JakeWharton-SaveArchived4Pocket 969 | git grep -l 'mavenCentral()' 'build.*' '**/build.*' 'settings.*' '**/settings.*' | xargs sed -i "" "s/mavenCentral()/mavenLocal(); mavenCentral()/g" 970 | git diff --patch 971 | ../this/gradlew build 972 | 973 | JakeWharton-video-swatch: 974 | runs-on: macos-latest 975 | if: ${{ !cancelled() }} 976 | needs: 977 | - workflow-up-to-date 978 | - square-okio 979 | steps: 980 | - name: Checkout this repository 981 | uses: actions/checkout@v4 982 | with: 983 | path: this 984 | - name: "Checkout JakeWharton/video-swatch repository" 985 | uses: actions/checkout@v4 986 | with: 987 | repository: JakeWharton/video-swatch 988 | path: JakeWharton-video-swatch 989 | - uses: actions/setup-java@v4 990 | with: 991 | distribution: 'zulu' 992 | java-version-file: this/.github/workflows/.java-version 993 | - uses: gradle/actions/setup-gradle@v4 994 | - uses: actions/setup-python@v5 995 | with: 996 | python-version: '3.13' 997 | - name: Patch external dependencies 998 | run: | 999 | pip install -r this/.github/requirements.txt 1000 | this/.github/helper.py patch-toml JakeWharton-video-swatch versions.kotlin key kotlin 1001 | - name: "Download internal dependency square/okio" 1002 | uses: actions/download-artifact@v4 1003 | if: ${{ needs.square-okio.result == 'success' }} 1004 | with: 1005 | name: square-okio-snapshot 1006 | path: ~/.m2/repository 1007 | - name: "Patch internal dependency square/okio" 1008 | run: this/.github/helper.py patch-toml JakeWharton-video-swatch libraries.okio value ${{ needs.square-okio.outputs.version }} 1009 | if: ${{ needs.square-okio.result == 'success' }} 1010 | - name: "Pre-build JakeWharton/video-swatch" 1011 | run: brew install ffmpeg 1012 | - name: "Build JakeWharton/video-swatch" 1013 | run: | 1014 | cd JakeWharton-video-swatch 1015 | git grep -l 'mavenCentral()' 'build.*' '**/build.*' 'settings.*' '**/settings.*' | xargs sed -i "" "s/mavenCentral()/mavenLocal(); mavenCentral()/g" 1016 | git diff --patch 1017 | ../this/gradlew build 1018 | 1019 | sqldelight-Grammar-Kit-Composer: 1020 | runs-on: macos-latest 1021 | if: ${{ !cancelled() }} 1022 | outputs: 1023 | version: ${{ steps.version.outputs.version }} 1024 | needs: 1025 | - workflow-up-to-date 1026 | - square-kotlinpoet 1027 | steps: 1028 | - name: Checkout this repository 1029 | uses: actions/checkout@v4 1030 | with: 1031 | path: this 1032 | - name: "Checkout sqldelight/Grammar-Kit-Composer repository" 1033 | uses: actions/checkout@v4 1034 | with: 1035 | repository: sqldelight/Grammar-Kit-Composer 1036 | path: sqldelight-Grammar-Kit-Composer 1037 | - uses: actions/setup-java@v4 1038 | with: 1039 | distribution: 'zulu' 1040 | java-version-file: this/.github/workflows/.java-version 1041 | - uses: gradle/actions/setup-gradle@v4 1042 | - uses: actions/setup-python@v5 1043 | with: 1044 | python-version: '3.13' 1045 | - name: Patch external dependencies 1046 | run: | 1047 | pip install -r this/.github/requirements.txt 1048 | this/.github/helper.py patch-toml sqldelight-Grammar-Kit-Composer plugins.kotlinJvm key kotlin 1049 | - name: "Download internal dependency square/kotlinpoet" 1050 | uses: actions/download-artifact@v4 1051 | if: ${{ needs.square-kotlinpoet.result == 'success' }} 1052 | with: 1053 | name: square-kotlinpoet-snapshot 1054 | path: ~/.m2/repository 1055 | - name: "Patch internal dependency square/kotlinpoet" 1056 | run: this/.github/helper.py patch-toml sqldelight-Grammar-Kit-Composer libraries.kotlinPoet value ${{ needs.square-kotlinpoet.outputs.version }} 1057 | if: ${{ needs.square-kotlinpoet.result == 'success' }} 1058 | - name: "Build sqldelight/Grammar-Kit-Composer" 1059 | run: | 1060 | cd sqldelight-Grammar-Kit-Composer 1061 | git grep -l 'mavenCentral()' 'build.*' '**/build.*' 'settings.*' '**/settings.*' | xargs sed -i "" "s/mavenCentral()/mavenLocal(); mavenCentral()/g" 1062 | git diff --patch 1063 | ../this/gradlew build publishToMavenLocal 1064 | - uses: actions/upload-artifact@v4 1065 | with: 1066 | name: sqldelight-Grammar-Kit-Composer-snapshot 1067 | path: ~/.m2/repository 1068 | if-no-files-found: error 1069 | - id: version 1070 | run: perl -ne '/VERSION_NAME=(.*)/ and print "version=$1",$/' sqldelight-Grammar-Kit-Composer/gradle.properties >> "$GITHUB_OUTPUT" 1071 | 1072 | sqldelight-sql-psi: 1073 | runs-on: macos-latest 1074 | if: ${{ !cancelled() }} 1075 | outputs: 1076 | version: ${{ steps.version.outputs.version }} 1077 | needs: 1078 | - workflow-up-to-date 1079 | - sqldelight-Grammar-Kit-Composer 1080 | steps: 1081 | - name: Checkout this repository 1082 | uses: actions/checkout@v4 1083 | with: 1084 | path: this 1085 | - name: "Checkout sqldelight/sql-psi repository" 1086 | uses: actions/checkout@v4 1087 | with: 1088 | repository: sqldelight/sql-psi 1089 | path: sqldelight-sql-psi 1090 | - uses: actions/setup-java@v4 1091 | with: 1092 | distribution: 'zulu' 1093 | java-version-file: this/.github/workflows/.java-version 1094 | - uses: gradle/actions/setup-gradle@v4 1095 | - uses: actions/setup-python@v5 1096 | with: 1097 | python-version: '3.13' 1098 | - name: Patch external dependencies 1099 | run: | 1100 | pip install -r this/.github/requirements.txt 1101 | this/.github/helper.py patch-toml sqldelight-sql-psi versions.kotlin key kotlin 1102 | - name: "Download internal dependency sqldelight/Grammar-Kit-Composer" 1103 | uses: actions/download-artifact@v4 1104 | if: ${{ needs.sqldelight-Grammar-Kit-Composer.result == 'success' }} 1105 | with: 1106 | name: sqldelight-Grammar-Kit-Composer-snapshot 1107 | path: ~/.m2/repository 1108 | - name: "Patch internal dependency sqldelight/Grammar-Kit-Composer" 1109 | run: this/.github/helper.py patch-toml sqldelight-sql-psi plugins.grammarKitComposer value ${{ needs.sqldelight-Grammar-Kit-Composer.outputs.version }} 1110 | if: ${{ needs.sqldelight-Grammar-Kit-Composer.result == 'success' }} 1111 | - name: "Build sqldelight/sql-psi" 1112 | run: | 1113 | cd sqldelight-sql-psi 1114 | git grep -l 'mavenCentral()' 'build.*' '**/build.*' 'settings.*' '**/settings.*' | xargs sed -i "" "s/mavenCentral()/mavenLocal(); mavenCentral()/g" 1115 | git diff --patch 1116 | ../this/gradlew build publishToMavenLocal 1117 | - uses: actions/upload-artifact@v4 1118 | with: 1119 | name: sqldelight-sql-psi-snapshot 1120 | path: ~/.m2/repository 1121 | if-no-files-found: error 1122 | - id: version 1123 | run: perl -ne '/VERSION_NAME=(.*)/ and print "version=$1",$/' sqldelight-sql-psi/gradle.properties >> "$GITHUB_OUTPUT" 1124 | 1125 | square-kotlinpoet: 1126 | runs-on: macos-latest 1127 | if: ${{ !cancelled() }} 1128 | outputs: 1129 | version: ${{ steps.version.outputs.version }} 1130 | needs: 1131 | - workflow-up-to-date 1132 | steps: 1133 | - name: Checkout this repository 1134 | uses: actions/checkout@v4 1135 | with: 1136 | path: this 1137 | - name: "Checkout square/kotlinpoet repository" 1138 | uses: actions/checkout@v4 1139 | with: 1140 | repository: square/kotlinpoet 1141 | path: square-kotlinpoet 1142 | - uses: actions/setup-java@v4 1143 | with: 1144 | distribution: 'zulu' 1145 | java-version-file: this/.github/workflows/.java-version 1146 | - uses: gradle/actions/setup-gradle@v4 1147 | - uses: actions/setup-python@v5 1148 | with: 1149 | python-version: '3.13' 1150 | - name: Patch external dependencies 1151 | run: | 1152 | pip install -r this/.github/requirements.txt 1153 | this/.github/helper.py patch-toml square-kotlinpoet versions.kotlin key kotlin 1154 | this/.github/helper.py patch-toml square-kotlinpoet versions.ksp key ksp 1155 | - name: "Build square/kotlinpoet" 1156 | run: | 1157 | cd square-kotlinpoet 1158 | git grep -l 'mavenCentral()' 'build.*' '**/build.*' 'settings.*' '**/settings.*' | xargs sed -i "" "s/mavenCentral()/mavenLocal(); mavenCentral()/g" 1159 | git diff --patch 1160 | ../this/gradlew kotlinUpgradeYarnLock build publishToMavenLocal 1161 | - uses: actions/upload-artifact@v4 1162 | with: 1163 | name: square-kotlinpoet-snapshot 1164 | path: ~/.m2/repository 1165 | if-no-files-found: error 1166 | - id: version 1167 | run: perl -ne '/VERSION_NAME=(.*)/ and print "version=$1",$/' square-kotlinpoet/gradle.properties >> "$GITHUB_OUTPUT" 1168 | 1169 | square-okio: 1170 | runs-on: macos-latest 1171 | if: ${{ !cancelled() }} 1172 | outputs: 1173 | version: ${{ steps.version.outputs.version }} 1174 | needs: 1175 | - workflow-up-to-date 1176 | - cashapp-burst 1177 | steps: 1178 | - name: Checkout this repository 1179 | uses: actions/checkout@v4 1180 | with: 1181 | path: this 1182 | - name: "Checkout square/okio repository" 1183 | uses: actions/checkout@v4 1184 | with: 1185 | repository: square/okio 1186 | path: square-okio 1187 | - uses: actions/setup-java@v4 1188 | with: 1189 | distribution: 'zulu' 1190 | java-version-file: this/.github/workflows/.java-version 1191 | - uses: gradle/actions/setup-gradle@v4 1192 | - uses: actions/setup-python@v5 1193 | with: 1194 | python-version: '3.13' 1195 | - name: Patch external dependencies 1196 | run: | 1197 | pip install -r this/.github/requirements.txt 1198 | this/.github/helper.py patch-toml square-okio versions.kotlin key kotlin 1199 | this/.github/helper.py patch-toml square-okio libraries.android-gradle-plugin key agp 1200 | - name: "Download internal dependency cashapp/burst" 1201 | uses: actions/download-artifact@v4 1202 | if: ${{ needs.cashapp-burst.result == 'success' }} 1203 | with: 1204 | name: cashapp-burst-snapshot 1205 | path: ~/.m2/repository 1206 | - name: "Patch internal dependency cashapp/burst" 1207 | run: this/.github/helper.py patch-toml square-okio libraries.burst-gradle-plugin value ${{ needs.cashapp-burst.outputs.version }} 1208 | if: ${{ needs.cashapp-burst.result == 'success' }} 1209 | - name: "Build square/okio" 1210 | run: | 1211 | cd square-okio 1212 | git grep -l 'mavenCentral()' 'build.*' '**/build.*' 'settings.*' '**/settings.*' | xargs sed -i "" "s/mavenCentral()/mavenLocal(); mavenCentral()/g" 1213 | git diff --patch 1214 | ../this/gradlew kotlinUpgradeYarnLock build publishToMavenLocal 1215 | - uses: actions/upload-artifact@v4 1216 | with: 1217 | name: square-okio-snapshot 1218 | path: ~/.m2/repository 1219 | if-no-files-found: error 1220 | - id: version 1221 | run: perl -ne '/VERSION_NAME=(.*)/ and print "version=$1",$/' square-okio/gradle.properties >> "$GITHUB_OUTPUT" 1222 | 1223 | square-okhttp: 1224 | runs-on: macos-latest 1225 | if: ${{ !cancelled() }} 1226 | outputs: 1227 | version: ${{ steps.version.outputs.version }} 1228 | needs: 1229 | - workflow-up-to-date 1230 | - square-okio 1231 | - square-kotlinpoet 1232 | steps: 1233 | - name: Checkout this repository 1234 | uses: actions/checkout@v4 1235 | with: 1236 | path: this 1237 | - name: "Checkout square/okhttp repository" 1238 | uses: actions/checkout@v4 1239 | with: 1240 | repository: square/okhttp 1241 | path: square-okhttp 1242 | - uses: actions/setup-java@v4 1243 | with: 1244 | distribution: 'zulu' 1245 | java-version-file: this/.github/workflows/.java-version 1246 | - uses: gradle/actions/setup-gradle@v4 1247 | - uses: actions/setup-python@v5 1248 | with: 1249 | python-version: '3.13' 1250 | - name: Patch external dependencies 1251 | run: | 1252 | pip install -r this/.github/requirements.txt 1253 | this/.github/helper.py patch-toml square-okhttp versions.org-jetbrains-kotlin key kotlin 1254 | this/.github/helper.py patch-toml square-okhttp versions.ksp key ksp 1255 | - name: "Download internal dependency square/okio" 1256 | uses: actions/download-artifact@v4 1257 | if: ${{ needs.square-okio.result == 'success' }} 1258 | with: 1259 | name: square-okio-snapshot 1260 | path: ~/.m2/repository 1261 | - name: "Patch internal dependency square/okio" 1262 | run: this/.github/helper.py patch-toml square-okhttp versions.com-squareup-okio value ${{ needs.square-okio.outputs.version }} 1263 | if: ${{ needs.square-okio.result == 'success' }} 1264 | - name: "Download internal dependency square/kotlinpoet" 1265 | uses: actions/download-artifact@v4 1266 | if: ${{ needs.square-kotlinpoet.result == 'success' }} 1267 | with: 1268 | name: square-kotlinpoet-snapshot 1269 | path: ~/.m2/repository 1270 | - name: "Patch internal dependency square/kotlinpoet" 1271 | run: this/.github/helper.py patch-toml square-okhttp libraries.squareup-kotlinPoet value ${{ needs.square-kotlinpoet.outputs.version }} 1272 | if: ${{ needs.square-kotlinpoet.result == 'success' }} 1273 | - name: "Build square/okhttp" 1274 | run: | 1275 | cd square-okhttp 1276 | git grep -l 'mavenCentral()' 'build.*' '**/build.*' 'settings.*' '**/settings.*' | xargs sed -i "" "s/mavenCentral()/mavenLocal(); mavenCentral()/g" 1277 | git diff --patch 1278 | ../this/gradlew publishToMavenLocal 1279 | - uses: actions/upload-artifact@v4 1280 | with: 1281 | name: square-okhttp-snapshot 1282 | path: ~/.m2/repository 1283 | if-no-files-found: error 1284 | - id: version 1285 | run: perl -ne '/version = (.*)/ and print "version=$1",$/' square-okhttp/build.gradle.kts >> "$GITHUB_OUTPUT" 1286 | 1287 | square-retrofit: 1288 | runs-on: macos-latest 1289 | if: ${{ !cancelled() }} 1290 | outputs: 1291 | version: ${{ steps.version.outputs.version }} 1292 | needs: 1293 | - workflow-up-to-date 1294 | - square-okhttp 1295 | steps: 1296 | - name: Checkout this repository 1297 | uses: actions/checkout@v4 1298 | with: 1299 | path: this 1300 | - name: "Checkout square/retrofit repository" 1301 | uses: actions/checkout@v4 1302 | with: 1303 | repository: square/retrofit 1304 | path: square-retrofit 1305 | - uses: actions/setup-java@v4 1306 | with: 1307 | distribution: 'zulu' 1308 | java-version-file: this/.github/workflows/.java-version 1309 | - uses: gradle/actions/setup-gradle@v4 1310 | - uses: actions/setup-python@v5 1311 | with: 1312 | python-version: '3.13' 1313 | - name: Patch external dependencies 1314 | run: | 1315 | pip install -r this/.github/requirements.txt 1316 | this/.github/helper.py patch-toml square-retrofit libraries.androidPlugin key agp 1317 | this/.github/helper.py patch-toml square-retrofit versions.kotlin key kotlin 1318 | - name: "Download internal dependency square/okhttp" 1319 | uses: actions/download-artifact@v4 1320 | if: ${{ needs.square-okhttp.result == 'success' }} 1321 | with: 1322 | name: square-okhttp-snapshot 1323 | path: ~/.m2/repository 1324 | - name: "Patch internal dependency square/okhttp" 1325 | run: this/.github/helper.py patch-toml square-retrofit versions.okhttp value ${{ needs.square-okhttp.outputs.version }} 1326 | if: ${{ needs.square-okhttp.result == 'success' }} 1327 | - name: "Build square/retrofit" 1328 | run: | 1329 | cd square-retrofit 1330 | git grep -l 'mavenCentral()' 'build.*' '**/build.*' 'settings.*' '**/settings.*' | xargs sed -i "" "s/mavenCentral()/mavenLocal(); mavenCentral()/g" 1331 | git diff --patch 1332 | ../this/gradlew build publishToMavenLocal 1333 | - uses: actions/upload-artifact@v4 1334 | with: 1335 | name: square-retrofit-snapshot 1336 | path: ~/.m2/repository 1337 | if-no-files-found: error 1338 | - id: version 1339 | run: perl -ne '/VERSION_NAME=(.*)/ and print "version=$1",$/' square-retrofit/gradle.properties >> "$GITHUB_OUTPUT" 1340 | 1341 | final-status: 1342 | if: ${{ !cancelled() }} 1343 | runs-on: ubuntu-latest 1344 | needs: 1345 | - workflow-up-to-date 1346 | - cashapp-burst 1347 | - cashapp-copper 1348 | - cashapp-licensee 1349 | - cashapp-molecule 1350 | - cashapp-paraphrase 1351 | - cashapp-redwood 1352 | - cashapp-turbine 1353 | - JakeWharton-cite 1354 | - JakeWharton-crossword 1355 | - JakeWharton-dependency-tree-diff 1356 | - JakeWharton-dependency-watch 1357 | - JakeWharton-diffuse 1358 | - JakeWharton-finalization-hook 1359 | - JakeWharton-hardcover-data-sync 1360 | - JakeWharton-kmp-missing-targets 1361 | - JakeWharton-mosaic 1362 | - JakeWharton-picnic 1363 | - JakeWharton-SaveArchived4Pocket 1364 | - JakeWharton-video-swatch 1365 | - sqldelight-Grammar-Kit-Composer 1366 | - sqldelight-sql-psi 1367 | - square-kotlinpoet 1368 | - square-okio 1369 | - square-okhttp 1370 | - square-retrofit 1371 | steps: 1372 | - name: Check 1373 | run: | 1374 | results=$(tr -d '\n' <<< '${{ toJSON(needs.*.result) }}') 1375 | if ! grep -q -v -E '(failure|cancelled)' <<< "$results"; then 1376 | echo "One or more required jobs failed" 1377 | exit 1 1378 | fi 1379 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Prerelease Testing 2 | 3 | Automatically test projects against the latest versions of Kotlin, Gradle, and each other. 4 | 5 | Included projects: 6 | 7 | ![](.github/projects.svg) 8 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JakeWharton/prerelease-testing/8bc7b8f522aa73702b720755cb0deb093a705b15/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionSha256Sum=f682abba2db33587373c58f558c9387b25f7ea592298b57defbf33fc5488c43d 4 | distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-milestone-9-bin.zip 5 | networkTimeout=10000 6 | validateDistributionUrl=true 7 | zipStoreBase=GRADLE_USER_HOME 8 | zipStorePath=wrapper/dists 9 | -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # 4 | # Copyright © 2015 the original authors. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # https://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | # SPDX-License-Identifier: Apache-2.0 19 | # 20 | 21 | ############################################################################## 22 | # 23 | # Gradle start up script for POSIX generated by Gradle. 24 | # 25 | # Important for running: 26 | # 27 | # (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is 28 | # noncompliant, but you have some other compliant shell such as ksh or 29 | # bash, then to run this script, type that shell name before the whole 30 | # command line, like: 31 | # 32 | # ksh Gradle 33 | # 34 | # Busybox and similar reduced shells will NOT work, because this script 35 | # requires all of these POSIX shell features: 36 | # * functions; 37 | # * expansions «$var», «${var}», «${var:-default}», «${var+SET}», 38 | # «${var#prefix}», «${var%suffix}», and «$( cmd )»; 39 | # * compound commands having a testable exit status, especially «case»; 40 | # * various built-in commands including «command», «set», and «ulimit». 41 | # 42 | # Important for patching: 43 | # 44 | # (2) This script targets any POSIX shell, so it avoids extensions provided 45 | # by Bash, Ksh, etc; in particular arrays are avoided. 46 | # 47 | # The "traditional" practice of packing multiple parameters into a 48 | # space-separated string is a well documented source of bugs and security 49 | # problems, so this is (mostly) avoided, by progressively accumulating 50 | # options in "$@", and eventually passing that to Java. 51 | # 52 | # Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, 53 | # and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; 54 | # see the in-line comments for details. 55 | # 56 | # There are tweaks for specific operating systems such as AIX, CygWin, 57 | # Darwin, MinGW, and NonStop. 58 | # 59 | # (3) This script is generated from the Groovy template 60 | # https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt 61 | # within the Gradle project. 62 | # 63 | # You can find Gradle at https://github.com/gradle/gradle/. 64 | # 65 | ############################################################################## 66 | 67 | # Attempt to set APP_HOME 68 | 69 | # Resolve links: $0 may be a link 70 | app_path=$0 71 | 72 | # Need this for daisy-chained symlinks. 73 | while 74 | APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path 75 | [ -h "$app_path" ] 76 | do 77 | ls=$( ls -ld "$app_path" ) 78 | link=${ls#*' -> '} 79 | case $link in #( 80 | /*) app_path=$link ;; #( 81 | *) app_path=$APP_HOME$link ;; 82 | esac 83 | done 84 | 85 | # This is normally unused 86 | # shellcheck disable=SC2034 87 | APP_BASE_NAME=${0##*/} 88 | # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) 89 | APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit 90 | 91 | # Use the maximum available, or set MAX_FD != -1 to use that value. 92 | MAX_FD=maximum 93 | 94 | warn () { 95 | echo "$*" 96 | } >&2 97 | 98 | die () { 99 | echo 100 | echo "$*" 101 | echo 102 | exit 1 103 | } >&2 104 | 105 | # OS specific support (must be 'true' or 'false'). 106 | cygwin=false 107 | msys=false 108 | darwin=false 109 | nonstop=false 110 | case "$( uname )" in #( 111 | CYGWIN* ) cygwin=true ;; #( 112 | Darwin* ) darwin=true ;; #( 113 | MSYS* | MINGW* ) msys=true ;; #( 114 | NONSTOP* ) nonstop=true ;; 115 | esac 116 | 117 | CLASSPATH="\\\"\\\"" 118 | 119 | 120 | # Determine the Java command to use to start the JVM. 121 | if [ -n "$JAVA_HOME" ] ; then 122 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 123 | # IBM's JDK on AIX uses strange locations for the executables 124 | JAVACMD=$JAVA_HOME/jre/sh/java 125 | else 126 | JAVACMD=$JAVA_HOME/bin/java 127 | fi 128 | if [ ! -x "$JAVACMD" ] ; then 129 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 130 | 131 | Please set the JAVA_HOME variable in your environment to match the 132 | location of your Java installation." 133 | fi 134 | else 135 | JAVACMD=java 136 | if ! command -v java >/dev/null 2>&1 137 | then 138 | die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 139 | 140 | Please set the JAVA_HOME variable in your environment to match the 141 | location of your Java installation." 142 | fi 143 | fi 144 | 145 | # Increase the maximum file descriptors if we can. 146 | if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then 147 | case $MAX_FD in #( 148 | max*) 149 | # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. 150 | # shellcheck disable=SC2039,SC3045 151 | MAX_FD=$( ulimit -H -n ) || 152 | warn "Could not query maximum file descriptor limit" 153 | esac 154 | case $MAX_FD in #( 155 | '' | soft) :;; #( 156 | *) 157 | # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. 158 | # shellcheck disable=SC2039,SC3045 159 | ulimit -n "$MAX_FD" || 160 | warn "Could not set maximum file descriptor limit to $MAX_FD" 161 | esac 162 | fi 163 | 164 | # Collect all arguments for the java command, stacking in reverse order: 165 | # * args from the command line 166 | # * the main class name 167 | # * -classpath 168 | # * -D...appname settings 169 | # * --module-path (only if needed) 170 | # * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. 171 | 172 | # For Cygwin or MSYS, switch paths to Windows format before running java 173 | if "$cygwin" || "$msys" ; then 174 | APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) 175 | CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) 176 | 177 | JAVACMD=$( cygpath --unix "$JAVACMD" ) 178 | 179 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 180 | for arg do 181 | if 182 | case $arg in #( 183 | -*) false ;; # don't mess with options #( 184 | /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath 185 | [ -e "$t" ] ;; #( 186 | *) false ;; 187 | esac 188 | then 189 | arg=$( cygpath --path --ignore --mixed "$arg" ) 190 | fi 191 | # Roll the args list around exactly as many times as the number of 192 | # args, so each arg winds up back in the position where it started, but 193 | # possibly modified. 194 | # 195 | # NB: a `for` loop captures its iteration list before it begins, so 196 | # changing the positional parameters here affects neither the number of 197 | # iterations, nor the values presented in `arg`. 198 | shift # remove old arg 199 | set -- "$@" "$arg" # push replacement arg 200 | done 201 | fi 202 | 203 | 204 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 205 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' 206 | 207 | # Collect all arguments for the java command: 208 | # * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, 209 | # and any embedded shellness will be escaped. 210 | # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be 211 | # treated as '${Hostname}' itself on the command line. 212 | 213 | set -- \ 214 | "-Dorg.gradle.appname=$APP_BASE_NAME" \ 215 | -classpath "$CLASSPATH" \ 216 | -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ 217 | "$@" 218 | 219 | # Stop when "xargs" is not available. 220 | if ! command -v xargs >/dev/null 2>&1 221 | then 222 | die "xargs is not available" 223 | fi 224 | 225 | # Use "xargs" to parse quoted args. 226 | # 227 | # With -n1 it outputs one arg per line, with the quotes and backslashes removed. 228 | # 229 | # In Bash we could simply go: 230 | # 231 | # readarray ARGS < <( xargs -n1 <<<"$var" ) && 232 | # set -- "${ARGS[@]}" "$@" 233 | # 234 | # but POSIX shell has neither arrays nor command substitution, so instead we 235 | # post-process each arg (as a line of input to sed) to backslash-escape any 236 | # character that might be a shell metacharacter, then use eval to reverse 237 | # that process (while maintaining the separation between arguments), and wrap 238 | # the whole thing up as a single "set" statement. 239 | # 240 | # This will of course break if any of these variables contains a newline or 241 | # an unmatched quote. 242 | # 243 | 244 | eval "set -- $( 245 | printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | 246 | xargs -n1 | 247 | sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | 248 | tr '\n' ' ' 249 | )" '"$@"' 250 | 251 | exec "$JAVACMD" "$@" 252 | -------------------------------------------------------------------------------- /libs.versions.toml: -------------------------------------------------------------------------------- 1 | [versions] 2 | agp = "8.12.0-alpha04" 3 | atomicfu = "0.28.0-beta" 4 | jbCompose = "1.9.0-alpha02" 5 | kotlin = "2.1.21" 6 | ksp = "2.1.21-2.0.1" 7 | 8 | # These coordinates are othewise unused, but allow Renovate to understand the associated versions. 9 | [libraries] 10 | agp = { module = "com.android.tools.build:gradle", version.ref = "agp" } 11 | atomicfu = { module = "org.jetbrains.kotlinx:atomicfu", version.ref = "atomicfu" } 12 | jetbrains-compose = { module = "org.jetbrains.compose.runtime:runtime", version.ref = "jbCompose" } 13 | kotlin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" } 14 | ksp = { module = "com.google.devtools.ksp:symbol-processing-gradle-plugin", version.ref = "ksp" } 15 | -------------------------------------------------------------------------------- /projects.yaml: -------------------------------------------------------------------------------- 1 | "cashapp/burst": 2 | pre_build: kotlinUpgradeYarnLock 3 | external_dependencies: 4 | agp: libraries.android-gradlePlugin 5 | kotlin: versions.kotlin 6 | ksp: libraries.google-ksp 7 | version: 8 | file: gradle.properties 9 | regex: "VERSION_NAME=(.*)" 10 | 11 | "cashapp/copper": 12 | external_dependencies: 13 | agp: libraries.android-gradlePlugin 14 | kotlin: libraries.kotlin-gradlePlugin 15 | internal_dependencies: 16 | "cashapp/turbine": libraries.turbine 17 | version: 18 | file: gradle.properties 19 | regex: "VERSION_NAME=(.*)" 20 | 21 | "cashapp/licensee": 22 | compile_only: true # Test golden files hard code versions. 23 | external_dependencies: 24 | agp: versions.agp 25 | kotlin: versions.kotlin 26 | internal_dependencies: 27 | "square/kotlinpoet": libraries.kotlinpoet 28 | version: 29 | file: gradle.properties 30 | regex: "VERSION_NAME=(.*)" 31 | 32 | "cashapp/molecule": 33 | pre_build: kotlinUpgradeYarnLock 34 | external_dependencies: 35 | agp: libraries.android-plugin 36 | jbCompose: versions.jetbrains-compose 37 | kotlin: versions.kotlin 38 | internal_dependencies: 39 | "cashapp/turbine": libraries.turbine 40 | "square/okhttp": versions.squareup-okhttp 41 | "square/retrofit": versions.squareup-retrofit 42 | version: 43 | file: gradle.properties 44 | regex: "VERSION_NAME=(.*)" 45 | 46 | "cashapp/paraphrase": 47 | external_dependencies: 48 | agp: versions.agp 49 | kotlin: versions.kotlin 50 | internal_dependencies: 51 | "square/kotlinpoet": libraries.kotlinPoet 52 | version: 53 | file: gradle.properties 54 | regex: "VERSION_NAME=(.*)" 55 | 56 | "cashapp/redwood": 57 | pre_build: kotlinUpgradeYarnLock 58 | post_build: -x :redwood-treehouse-host:check 59 | external_dependencies: 60 | agp: libraries.androidGradlePlugin 61 | atomicfu: libraries.atomicFuPlugin 62 | jbCompose: versions.jbCompose 63 | kotlin: versions.kotlin 64 | ksp: versions.ksp 65 | internal_dependencies: 66 | "cashapp/burst": versions.burst 67 | "cashapp/turbine": libraries.turbine 68 | "square/kotlinpoet": libraries.kotlinPoet 69 | "square/okio": versions.okio 70 | "square/okhttp": libraries.okhttp 71 | version: 72 | file: build-support/src/main/kotlin/app/cash/redwood/buildsupport/RedwoodBuildPlugin.kt 73 | regex: "REDWOOD_VERSION = \"(.*)\"" 74 | 75 | "cashapp/turbine": 76 | pre_build: kotlinUpgradeYarnLock 77 | external_dependencies: 78 | kotlin: plugins.kotlin 79 | version: 80 | file: gradle.properties 81 | regex: "VERSION_NAME=(.*)" 82 | 83 | "JakeWharton/cite": 84 | pre_build: kotlinUpgradeYarnLock 85 | external_dependencies: 86 | agp: libraries.android-gradlePlugin 87 | kotlin: versions.kotlin 88 | version: 89 | file: gradle.properties 90 | regex: "VERSION_NAME=(.*)" 91 | 92 | "JakeWharton/crossword": 93 | pre_build: kotlinUpgradeYarnLock 94 | external_dependencies: 95 | kotlin: libraries.kotlinPlugin 96 | version: 97 | file: gradle.properties 98 | regex: "VERSION_NAME=(.*)" 99 | 100 | "JakeWharton/dependency-tree-diff": 101 | external_dependencies: 102 | kotlin: libraries.kotlin-gradle-plugin 103 | 104 | "JakeWharton/dependency-watch": 105 | external_dependencies: 106 | kotlin: versions.kotlin 107 | internal_dependencies: 108 | "square/okhttp": versions.okhttp 109 | 110 | "JakeWharton/diffuse": 111 | external_dependencies: 112 | agp: libraries.apkSigner 113 | kotlin: libraries.kotlinPlugin 114 | internal_dependencies: 115 | "square/okio": libraries.okio 116 | version: 117 | file: gradle.properties 118 | regex: "VERSION_NAME=(.*)" 119 | 120 | "JakeWharton/finalization-hook": 121 | external_dependencies: 122 | kotlin: versions.kotlin 123 | version: 124 | file: gradle.properties 125 | regex: "VERSION_NAME=(.*)" 126 | 127 | "JakeWharton/hardcover-data-sync": 128 | external_dependencies: 129 | kotlin: libraries.kotlin-gradlePlugin 130 | internal_dependencies: 131 | "square/okhttp": versions.okhttp 132 | 133 | "JakeWharton/kmp-missing-targets": 134 | compile_only: true # Test golden files hard code versions. 135 | external_dependencies: 136 | agp: libraries.android-gradlePlugin 137 | kotlin: versions.kotlin 138 | version: 139 | file: gradle.properties 140 | regex: "VERSION_NAME=(.*)" 141 | 142 | "JakeWharton/mosaic": 143 | external_dependencies: 144 | jbCompose: versions.jetbrains-compose 145 | kotlin: versions.kotlin 146 | internal_dependencies: 147 | "JakeWharton/cite": libraries.cite-gradlePlugin 148 | "JakeWharton/finalization-hook": libraries.finalizationHook 149 | version: 150 | file: gradle.properties 151 | regex: "VERSION_NAME=(.*)" 152 | 153 | "JakeWharton/picnic": 154 | pre_build: kotlinUpgradeYarnLock 155 | external_dependencies: 156 | kotlin: libraries.kotlinPlugin 157 | internal_dependencies: 158 | "JakeWharton/crossword": libraries.crossword 159 | version: 160 | file: gradle.properties 161 | regex: "VERSION_NAME=(.*)" 162 | 163 | "JakeWharton/SaveArchived4Pocket": 164 | external_dependencies: 165 | agp: libraries.androidGradlePlugin 166 | kotlin: versions.kotlin 167 | internal_dependencies: 168 | "square/retrofit": versions.retrofit 169 | "square/okhttp": versions.okhttp 170 | 171 | "JakeWharton/video-swatch": 172 | pre_gradle: brew install ffmpeg 173 | external_dependencies: 174 | kotlin: versions.kotlin 175 | internal_dependencies: 176 | "square/okio": libraries.okio 177 | 178 | "sqldelight/Grammar-Kit-Composer": 179 | external_dependencies: 180 | kotlin: plugins.kotlinJvm 181 | internal_dependencies: 182 | "square/kotlinpoet": libraries.kotlinPoet 183 | version: 184 | file: gradle.properties 185 | regex: "VERSION_NAME=(.*)" 186 | 187 | "sqldelight/sql-psi": 188 | external_dependencies: 189 | kotlin: versions.kotlin 190 | internal_dependencies: 191 | "sqldelight/Grammar-Kit-Composer": plugins.grammarKitComposer 192 | version: 193 | file: gradle.properties 194 | regex: "VERSION_NAME=(.*)" 195 | 196 | "square/kotlinpoet": 197 | pre_build: kotlinUpgradeYarnLock 198 | external_dependencies: 199 | kotlin: versions.kotlin 200 | ksp: versions.ksp 201 | version: 202 | file: gradle.properties 203 | regex: "VERSION_NAME=(.*)" 204 | 205 | "square/okio": 206 | pre_build: kotlinUpgradeYarnLock 207 | external_dependencies: 208 | kotlin: versions.kotlin 209 | agp: libraries.android-gradle-plugin 210 | internal_dependencies: 211 | "cashapp/burst": libraries.burst-gradle-plugin 212 | version: 213 | file: gradle.properties 214 | regex: "VERSION_NAME=(.*)" 215 | 216 | "square/okhttp": 217 | compile_only: true # Build is all kinds of messed up. 218 | external_dependencies: 219 | kotlin: versions.org-jetbrains-kotlin 220 | ksp: versions.ksp 221 | internal_dependencies: 222 | "square/okio": versions.com-squareup-okio 223 | "square/kotlinpoet": libraries.squareup-kotlinPoet 224 | version: 225 | file: build.gradle.kts 226 | regex: "version = (.*)" 227 | 228 | "square/retrofit": 229 | external_dependencies: 230 | agp: libraries.androidPlugin 231 | kotlin: versions.kotlin 232 | internal_dependencies: 233 | "square/okhttp": versions.okhttp 234 | version: 235 | file: gradle.properties 236 | regex: "VERSION_NAME=(.*)" 237 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | dependencyResolutionManagement { 2 | repositories { 3 | mavenCentral() 4 | google() 5 | } 6 | } 7 | --------------------------------------------------------------------------------