Slide 1

Slide 1 text

Travis CIͷBuild MatrixΛ׆༻ͯ͠ Swift੡ϥΠϒϥϦΛLinuxରԠͤ͞Δ Sho Ikeda / @ikesyo CI/CD Test Night #4 2019-06-20 Thu #cicd_test_night

Slide 2

Slide 2 text

Sho Ikeda / @ikesyo • ͍͚͠ΐʔʗ஑ా ᠳ • גࣜձࣾ͸ͯͳʢژ౎ΦϑΟεʣ • εϚʔτϑΥϯΞϓϦ։ൃ • iOS / Android / React Native • Swiftίϛολʔ • https://twitter.com/ikesyo • https://github.com/ikesyo

Slide 3

Slide 3 text

Agenda • Swift Packages • Swift on Linux • ϩʔΧϧ։ൃ • Docker • CI؀ڥ • Travis CI • Build Matrix • swiftenv • ͦͷଞͷCIαʔϏε

Slide 4

Slide 4 text

Swift

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

Swift੡ϥΠϒϥϦ

Slide 7

Slide 7 text

Swift Packages

Slide 8

Slide 8 text

Swift Package Manager (SwiftPM) • The Package Manager for the Swift Programming Language • Bundled with Swift • Introduced in Swift 3 (2016) • ݱࡏ͸Swift 5ʢ2019೥ळʹSwift 5.1ʣ • https://github.com/apple/swift-package-manager

Slide 9

Slide 9 text

Swift Package Manager (SwiftPM) • Package.swift • ϚχϑΣετϑΝΠϧʢύοέʔδఆٛʣ • Targets, Products, Dependencies, Build Settings, ...

Slide 10

Slide 10 text

// swift-tools-version:5.0 import PackageDescription let package = Package( name: "Himotoki", platforms: [ .macOS(.v10_10), .iOS(.v8), .tvOS(.v9), .watchOS(.v2) ], products: [ .library(name: "Himotoki", targets: ["Himotoki"]), ], targets: [ .target(name: "Himotoki", dependencies: [], path: "Sources"), .testTarget(name: "HimotokiTests", dependencies: ["Himotoki"]), ], swiftLanguageVersions: [.v5] )

Slide 11

Slide 11 text

Swift Package Manager (SwiftPM) • Uses • [NEW!] iOS/macOS/tvOS/watchOS Apps (since Xcode 11) • CLI tools • Server-side Swift

Slide 12

Slide 12 text

Server-side Swift

Slide 13

Slide 13 text

Swift on Linux

Slide 14

Slide 14 text

Swift on Linux • https://swift.org/about/#linux • Official: Ubuntu 18.04/16.04/14.04 • Community: Fedora 27, Debian 9.5 • ී௨ͷSwiftϓϩάϥϚʔ͸macOSͱXcodeͰ։ൃ͍ͯ͠Δ • Ͳ͏΍ͬͯLinuxͰϏϧυͯ͠ςετ͢Δʁ • ޓ׵ੑ͸Ͳ͏ͳͷʁ

Slide 15

Slide 15 text

ϩʔΧϧ։ൃ

Slide 16

Slide 16 text

Docker

Slide 17

Slide 17 text

swift-docker • An Ubuntu 16.04 and Ubuntu 18.04 Docker image for Swift. • https://github.com/apple/swift-docker • https://hub.docker.com/_/swift/ • $ docker run -it -v `pwd`:/project swift bash • $ cd project; swift build

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

ෳ਺όʔδϣϯͰςετ • ෳ਺όʔδϣϯαϙʔτɺޓ׵ੑͷ֬อ • $ docker run -it -v `pwd`:/project swift:5.0 bash • $ docker run -it -v `pwd`:/project swift:4.2 bash • $ docker run -it -v `pwd`:/project swift:4.1 bash • ...

Slide 20

Slide 20 text

CI؀ڥ

Slide 21

Slide 21 text

Travis CI

Slide 22

Slide 22 text

Travis CI • Build Matrix • https://docs.travis-ci.com/user/build-matrix/ • ෳ਺ͷδϣϒΛฒྻ࣮ߦ͢Δ • Linux͚ͩ͡Όͳͯ͘macOS΋࢖͑Δ • https://docs.travis-ci.com/user/reference/osx/ • macOSͱLinuxΛ·ͱΊͯςετͰ͖Δ • Always free for open source projects • https://travis-ci.com/plans • OSS͸ແྉͰLinux΋macOS΋࢖͑ΔʢmacOSͷಉ࣮࣌ߦ਺͸2·Ͱʣ • 1δϣϒ͋ͨΓͷϏϧυ࣌ؒͷ্ݶ͕50෼

Slide 23

Slide 23 text

Travis CI • Build Matrix • https://docs.travis-ci.com/user/build-matrix/ • ෳ਺ͷδϣϒΛฒྻ࣮ߦ͢Δ • Linux͚ͩ͡Όͳͯ͘macOS΋࢖͑Δ • https://docs.travis-ci.com/user/reference/osx/ • macOSͱLinuxΛ·ͱΊͯςετͰ͖Δ • Always free for open source projects • https://travis-ci.com/plans • OSS͸ແྉͰLinux΋macOS΋࢖͑ΔʢmacOSͷಉ࣮࣌ߦ਺͸2·Ͱʣ • 1δϣϒ͋ͨΓͷϏϧυ࣌ؒͷ্ݶ͕50෼

Slide 24

Slide 24 text

Build Matrix • 2*2*2ͷ8௨Γ rvm: - 2.5 - 2.2 gemfile: - gemfiles/Gemfile.rails-3.2.x - gemfiles/Gemfile.rails-3.0.x env: - ISOLATED=true - ISOLATED=false

Slide 25

Slide 25 text

Build Matrix matrix: include: - rvm: 2.5 gemfile: gemfiles/Gemfile.rails-3.2.x env: ISOLATED=false - rvm: 2.5 gemfile: gemfiles/Gemfile.rails-3.2.x env: ISOLATED=true

Slide 26

Slide 26 text

Build Matrix • macOSͱLinuxͦΕͧΕͰɺෳ਺όʔδϣϯͷSwiftΛςετ ͢Δ

Slide 27

Slide 27 text

Build Matrix language: generic matrix: include: - &swiftpm_darwin name: SwiftPM / Darwin / Swift 4.2 os: osx osx_image: xcode10.1 script: swift test - <<: *swiftpm_darwin name: SwiftPM / Darwin / Swift 5.0 osx_image: xcode10.2 - &swiftpm_linux name: SwiftPM / Linux / Swift 4.2 os: linux sudo: required dist: trusty env: - SWIFT_VERSION=4.2.4 install: eval "$(curl -sL https://swiftenv.fuller.li/install.sh)" script: swift test - <<: *swiftpm_linux name: SwiftPM / Linux / Swift 5.0 env: - SWIFT_VERSION=5.0 - <<: *swiftpm_linux name: SwiftPM / Linux / Swift 5.1 Development env: - SWIFT_VERSION=5.1-DEVELOPMENT-SNAPSHOT-2019-05-28-a

Slide 28

Slide 28 text

- &swiftpm_darwin name: SwiftPM / Darwin / Swift 4.2 os: osx osx_image: xcode10.1 script: swift test - <<: *swiftpm_darwin name: SwiftPM / Darwin / Swift 5.0 osx_image: xcode10.2

Slide 29

Slide 29 text

- &swiftpm_linux name: SwiftPM / Linux / Swift 4.2 os: linux sudo: required dist: trusty env: - SWIFT_VERSION=4.2.4 install: eval "$(curl -sL https://swiftenv.fuller.li/install.sh)" script: swift test - <<: *swiftpm_linux name: SwiftPM / Linux / Swift 5.0 env: - SWIFT_VERSION=5.0 - <<: *swiftpm_linux name: SwiftPM / Linux / Swift 5.1 Development env: - SWIFT_VERSION=5.1-DEVELOPMENT-SNAPSHOT-2019-05-28-a

Slide 30

Slide 30 text

swiftenv

Slide 31

Slide 31 text

swiftenv • https://github.com/kylef/swiftenv • Swift Version Manager • ͲͪΒ͔ͰόʔδϣϯΛࢦఆ • ϑΝΠϧ: .swift-version • ؀ڥม਺: SWIFT_VERSION • $ eval "$(curl -sL https://swiftenv.fuller.li/install.sh)" • swiftenvࣗମͱɺࢦఆ͞ΕͨSwiftͷόʔδϣϯΛΠϯετʔϧ • Travis CIͷδϣϒͰDockerΛ࢖͏ͷ͸໘౗ͳͷͰ͜Ε͕ศར • https://docs.travis-ci.com/user/docker/

Slide 32

Slide 32 text

ͦͷଞͷCIαʔϏε

Slide 33

Slide 33 text

ͦͷଞͷCIαʔϏε • macOSͱLinux/Dockerͷ྆ํ͕࢖͑Δ͜ͱ͕લఏ • Bitrise • CircleCI • Azure Pipelines

Slide 34

Slide 34 text

Bitrise • https://www.bitrise.io/ • OSS޲͚ͷແྉϓϥϯ͋Γ • https://blog.bitrise.io/free-developer-plan-features-for-open-source- projects-on-bitrise • ฒྻ࣮ߦෆՄ • Ϗϧυ࣌ؒ: 45෼·Ͱ • Ϗϧυճ਺: ແ੍ݶ • Linux/Android StackͰ͸࢖༻͢ΔDockerΠϝʔδΛࢦఆͰ͖Δ

Slide 35

Slide 35 text

CircleCI • https://circleci.com/ • OSS޲͚ͷແྉϓϥϯ͋Γ • https://circleci.com/pricing/ • Linux: 4ฒྻ • macOS: 1ฒྻʢϝʔϧͰ࿈བྷ͢Δඞཁ͋Γʣ

Slide 36

Slide 36 text

CircleCI • Workflows • https://circleci.com/docs/2.0/workflows-overview/ • Travis CIͷBuild MatrixͷΑ͏ʹॊೈͳฒྻ࣮ߦ͕Ͱ͖Δ • Linux: DockerϕʔεͳͷͰswiftenv͍Βͣ • ॊೈͳΩϟογϡ੍ޚ • https://circleci.com/docs/2.0/caching/

Slide 37

Slide 37 text

Azure Pipelines • https://azure.microsoft.com/ja-jp/services/devops/pipelines/ • OSS޲͚ͷແྉϓϥϯ͋Γ • LinuxɺmacOSɺWindowsͷ߹ܭͰ10ฒྻʢ੍࣌ؒݶͳ͠ʣ • Linux: DockerϕʔεͳͷͰswiftenv͍Βͣ • Azure Pipeline - Speaker Deck • iOS Test Night #10Ͱͷ@giginet͞Μͷൃද

Slide 38

Slide 38 text

! Happy Swift on Linux Life

Slide 39

Slide 39 text

Thank you Sho Ikeda / @ikesyo