Slide 1

Slide 1 text

RenovateͰ࣮ݱ͢Δ ϥΠϒϥϦͷ ࣗಈߋ৽ੜ׆ @ikesyo / Sho Ikeda iOSDC Japan 2023 2023-09-03 Sun #iosdc

Slide 2

Slide 2 text

@ikesyo / Sho Ikeda • ͍͚͠ΐʔʗ஑ా ᠳ • גࣜձࣾ͸ͯͳ γχΞΤϯδχΞʢژ౎ʣ • ϚϯΨΞϓϦνʔϜ • iOS (SwiftUI), Android (Jetpack Compose) • CI/CD (CircleCI, GitHub Actions, etc.) • RenovateίϯτϦϏϡʔλʔ • Valuable contributions • ௚ۙͰ͸Perlͷ cpanfile ରԠΛ࣮૷͠·ͨ͠ • @ikesyo • @ikesyo

Slide 3

Slide 3 text

աڈͷiOSDC JapanͰͷొஃ 4೥ৼΓͰ͢ • 5෼ͰΘ͔ΔʂXcode 11͔Β࢖͑ΔXCFrameworks by Sho Ikedaʢ͍͚ ͠ΐʔʣ | τʔΫ | iOSDC Japan 2019 #iosdc - fortee.jp • The latest info of Carthage by Sho IKEDA | τʔΫ | iOSDC Japan 2018 #iosdc - fortee.jp • The latest info of ReactiveSwift and ReactiveCocoa | iOSDC Japan 2017 • ίϛολʔ͕ޠΔʂReactiveCocoa 5.0 | iOSDC Japan 2016

Slide 4

Slide 4 text

RenovateͰ࣮ݱ͢Δ ϥΠϒϥϦͷ ࣗಈߋ৽ੜ׆

Slide 5

Slide 5 text

Renovate

Slide 6

Slide 6 text

Renovate • https://www.mend.io/renovate/ • ਺ेͷύοέʔδϚωʔδϟʔɾσʔλιʔεɺGitHub΍ GitLabͳͲෳ਺ͷϓϥοτϑΥʔϜʹ΋ରԠͨ͠ϥΠϒϥϦ ͷࣗಈߋ৽πʔϧɾαʔϏεʢແྉʣ • ಉछͷπʔϧʹ͸GitHubʹ౷߹͞ΕͨDependabotͳͲ΋͋ Γ·͢

Slide 7

Slide 7 text

Renovate • https://github.com/renovatebot/renovateͰ։ൃ͞Ε͍ͯΔOSS • ϥΠηϯε͸AGPL • ఏڙܗଶ • SaaS (GitHub App) • npmύοέʔδ • DockerΠϝʔδ • ηϧϑϗεςΟϯά൛ • https://www.mend.io/free-developer-tools/renovate/on-premises/

Slide 8

Slide 8 text

Why Renovate • ϥΠϒϥϦߋ৽Λࣗಈతʹݕ஌ͯ͠PRΛ࡞੒ͯ͘͠ΕΔ • ࣗ෼Ͱߋ৽Λ୳͠ʹߦ͘ඞཁ͕ͳ͘ͳΔ • ʢऔಘͰ͖ΔൣғͰʣϦϦʔεϊʔτɾChangelog΋ࡌͤͯ͘ΕΔ • ʢCI/ࣗಈςετ͕͋Ε͹ʣߋ৽ʹΑΔਖ਼ৗಈ࡞΍ίϯύΠϧΤ ϥʔΛ֬ೝ͠΍͍͢ • όάमਖ਼΍ػೳ௥ՃΛ଎΍͔ʹऔΓೖΕΔ͜ͱ͕Ͱ͖Δ • → OSΞοϓσʔτʹ΋௥ै͠΍͘͢ͳΔ

Slide 9

Slide 9 text

Why Renovate • iOSࢹ఺: CocoaPodsʢPodfileʣ΍SwiftPMʢPackage.swiftʣʹରԠ͍ͯ͠ Δ • Dependabot΋࠷ۙSwiftPMʹରԠ͠·ͨ͠Ͷ: Swift Support for Dependabot Updates - The GitHub Blog • Gradleʢbuild.gradle, Version CatalogʣʹରԠ͍ͯ͠ΔͷͰAndroidͰ ΋࢖͑Δ • ʲॏཁʳ௚઀తʹରԠ͍ͯ͠ͳ͍πʔϧɾϑΝΠϧͰ΋ਖ਼نදݱͰରԠ͕Մೳ • regex manager: https://docs.renovatebot.com/modules/manager/regex/

Slide 10

Slide 10 text

Why Renovate • άϧʔϐϯάػೳ • Gradle΍npmͰ1ͭͷϥΠϒϥϦ͕ෳ਺ͷϞδϡʔϧɾύοέʔδʹ ෼ׂ͞Ε͍ͯΔ࣌ʹɺ1ͭͣͭPRΛ࡞Βͣʹ·ͱΊͯߋ৽͢Δ͜ͱ͕ Մೳ • iOSͰ΋PodfileͰRxSwift΍RxRelay, RxCocoaͷߋ৽Λ1ͭͷPRʹ· ͱΊͨΓ • Dependabot΋࠷ۙʢ΍ͬͱʣରԠ͠·ͨ͠Ͷ: Grouped version updates for Dependabot are generally available - The GitHub Blog

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

Why Renovate • ඇৗʹॊೈͳઃఆ߲໨ • https://docs.renovatebot.com/configuration-options/ • ઃఆͷϓϦηοτΛ࡞ͬͯͦΕΛڞ༗ͨ͠Γ֦ு͢Δ͜ͱ΋Ͱ ͖Δ • ͸ͯͳͰ࢖༻͍ͯ͠ΔRenovateͷઃఆϓϦηοτΛެ։͠· ͨ͠ - Hatena Developer Blog • https://github.com/hatena/renovate-config

Slide 13

Slide 13 text

iOS։ൃͰͷRenovate πʔϧ ରԠঢ়گ උߟ CocoaPods ⭕ " Realm͕͋ΔͱNG1 XcodeGenͱซ༻͍ͯ͠ΔͱNG1 SwiftPM # $ Package.resolvedͷߋ৽ͱɺXcode͔Β Swift PackageΛ௥Ճ͢Δ৔߹ʹ͸ඇରԠ2 XcodeGen (Swift Package) ❌ & regex managerΛ࢖͏ Carthage ❌ & regex managerΛ࢖͏ 2 https://github.com/renovatebot/renovate/issues/6924, https://github.com/renovatebot/renovate/issues/9735 1 https://ikesyo.hatenablog.com/entry/potatotips-77-renovate-for-ios

Slide 14

Slide 14 text

SwiftPM • Package.resolvedͷߋ৽ʹඇରԠ • PRʹࣗ෼Ͱ௥͍ίϛοτΛ͢Δ͔ɺ΋͘͠͸ • CIͰʢྫ͑͹GitHub ActionsͰʣߋ৽͢ΔϫʔΫϑϩʔΛ ༻ҙ͢Δ

Slide 15

Slide 15 text

update-package-resolved.yml: on: pull_request: paths: - Package.swift jobs: preupdate: runs-on: ubuntu-latest outputs: files_changed: ${{ steps.file_changes.outputs.files }} steps: - uses: actions/checkout@v3 - id: file_changes uses: trilom/[email protected] update: runs-on: macos-latest needs: preupdate if: contains(fromJson(needs.preupdate.outputs.files_changed), 'Package.resolved') == false steps: - run: swift package resolve # `Package.resolved` Λߋ৽ͯ͠ - run: ... # ίϛοτˍϓογϡ͢Δ

Slide 16

Slide 16 text

regex manager The regex manager is designed to allow users to manually configure Renovate for how to find dependencies that aren't detected by the built-in package managers. • ૊ΈࠐΈͰ͸ରԠ͍ͯ͠ͳ͍΋ͷͰ΋ɺਖ਼نදݱͰର৅ͷϥΠ ϒϥϦ໊΍όʔδϣϯΛൈ͖ग़͠ɺࢦఆͨ͠σʔλιʔε͔Β ֘౰ͷϥΠϒϥϦͷߋ৽ΛνΣοΫͰ͖Δ • ਖ਼نදݱͰൈ͖ग़ͤͳ͍߲໨͕͋Δ৔߹͸௚઀ࢦఆ΋Ͱ͖Δ

Slide 17

Slide 17 text

regex manager - Dockerfileͷྫ Dockerfile: FROM node:12 ENV YARN_VERSION=1.19.1 RUN curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --version ${YARN_VERSION}

Slide 18

Slide 18 text

regex manager - Dockerfileͷྫ renovate.json: { "regexManagers": [ { "fileMatch": ["^Dockerfile$"], "matchStrings": ["ENV YARN_VERSION=(?.*?)\\n"], "depNameTemplate": "yarn", "datasourceTemplate": "npm" } ] }

Slide 19

Slide 19 text

regex manager - XcodeGen project.yml: packages: Quick: github: Quick/Quick version: 7.2.0 Nimble: github: Quick/Nimble version: 12.2.0

Slide 20

Slide 20 text

regex manager - XcodeGen renovate.json: { "regexManagers": [ { "fileMatch": ["^project.yml$"], "matchStrings": [ "github: (?.*?)\\s*version: ['\"]?(?[^'\"]+?)['\"]?\\s" ], "datasourceTemplate": "github-releases", "extractVersionTemplate": "^v?(?.*)$" } ] }

Slide 21

Slide 21 text

regex manager - Carthage Cartfile.private: github "Quick/Quick" "v7.2.0" github "Quick/Nimble" "v12.2.0"

Slide 22

Slide 22 text

regex manager - Carthage renovate.json: { "regexManagers": [ { "fileMatch": ["^Cartfile(\\.(private|resolved))?$"], "matchStrings": ["github\\s\\"(?.*?)\\"\\s[\"~>=\\s]+(?[a-zA-Z0-9.]+)"], "datasourceTemplate": "github-tags" } ] }

Slide 23

Slide 23 text

·ͱΊ • Renovate͸ϥΠϒϥϦߋ৽Λࣗಈతʹݕ஌ͯ͠PRΛ࡞੒ͯ͘͠ΕΔ • ରԠݴޠʢύοέʔδϚωʔδϟʔɾσʔλιʔεʣ͕ඇৗʹଟ͍ • iOSͰ΋AndroidͰ΋ʢFlutter/DartͰ΋ʣ࢖͑Δ • άϧʔϐϯά͕ศར • ඇৗʹॊೈͳઃఆ߲໨ • ϓϦηοτͷڞ༗΍֦ு΋ʢνʔϜ΍ࣾ಺ͰઃఆΛҭͯΒΕΔʣ • regex managerͱ͍͏ඇৗʹڧྗͳػೳʢΤεέʔϓϋονʣ

Slide 24

Slide 24 text

ࢀߟURL • https://www.mend.io/renovate/ • https://docs.renovatebot.com/configuration-options/ • https://docs.renovatebot.com/modules/manager/regex/ • ͸ͯͳͰ࢖༻͍ͯ͠ΔRenovateͷઃఆϓϦηοτΛެ։͠·ͨ͠ - Hatena Developer Blog • RenovateΛiOSΞϓϦ։ൃʹಋೖͯ͠Έͨ - dely tech blog • Kyash iOSΞϓϦͷϥΠϒϥϦ؅ཧΛSwift Package Manager΁׬શҠߦ͠·ͨ͠ - Kyash Product Blog • GitLab ͱ Renovate Ͱ iOS ͷϥΠϒϥϦΞοϓσʔτΛࣗಈԽ͢Δํ๏ (XcodeGen) - ΧΧ ΫίϜTechBlog

Slide 25

Slide 25 text

ϞόΠϧΞϓϦ։ൃͰ΋ ϥΠϒϥϦߋ৽ΛࣗಈԽ͍͖ͯ͠ ฻Β͠Λ๛͔ʹ͍͖ͯ͠·͠ΐ͏

Slide 26

Slide 26 text

! Happy Renovation

Slide 27

Slide 27 text

Thank you @ikesyo / Sho Ikeda

Slide 28

Slide 28 text

ීஈ͸ϚϯΨΞϓϦΛ࡞͍ͬͯ·͢ • ʮGigaViewer for AppsʯͰϚϯΨͷະདྷΛ޿͍͛ͨ - ࠾༻৘ใ - גࣜձࣾ͸ͯͳ

Slide 29

Slide 29 text

ීஈ͸ϚϯΨΞϓϦΛ࡞͍ͬͯ·͢ • νʔϜϝϯόʔͷΞ΢τϓοτ • ϚϯΨϏϡʔϫGigaViewer for AppsͰJetpack ComposeΛશ໘࠾༻ͯ͠Έͨ - Hatena Developer Blog • GigaViewer for AppsͰ࢖͍ͬͯΔศརSwiftUIίϯϙʔωϯτ̑࿈ൃʂ - Hatena Developer Blog