Skip to content

Instantly share code, notes, and snippets.

@mrk-han
Last active August 22, 2024 08:30
Show Gist options
  • Save mrk-han/3d746054eb721a9973817ec7a21363f1 to your computer and use it in GitHub Desktop.
Save mrk-han/3d746054eb721a9973817ec7a21363f1 to your computer and use it in GitHub Desktop.
Simple Guide for a Build and Testing Pipeline with Expo and EAS from Azure Devops CICD (Managed Workflow)
# https://aka.ms/yaml
trigger:
branches:
include:
- main
- releases/*
- hotfix/*
pr:
autoCancel: true
drafts: false
variables:
- group: name-of-variables-group-goes-here
stages:
- stage: build_and_test
displayName: Build and Test
pool:
vmImage: 'macos-latest'
jobs:
- job: build
displayName: Build
steps:
- checkout: self
clean: true
- task: NodeTool@0
inputs:
versionSpec: '16.x'
displayName: Install Node.js
- bash: |
set -x
npm install -g expo-cli
npm install -g eas-cli
displayName: Install pipeline dependencies
- bash: |
set -x
expo login -u $(SHARED_EXPO_USERNAME) -p $(SHARED_EXPO_PASSWORD) --non-interactive
displayName: Login to expo cli
- bash: yarn install --frozen-lockfile
displayName: Yarn install
- bash: |
set -x
yarn test:ci
displayName: Run Unit Tests
- bash: |
eas build --platform ios --profile buildForDetoxTesting --local
displayName: Build .app for UI Testing on Azure MacOS Agent
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
- bash: |
eas build --platform ios --non-interactive --no-wait
displayName: Run Build on EAS to have .app available on website too
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
- bash: |
expo publish --non-interactive
displayName: Publish app to expo default channel
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testRunner: JUnit
testResultsFiles: '**/junit.xml'
@JamesIde
Copy link

@adrianflda and @jerone did you either of you guys find a solution to your problems?

@jerone
Copy link

jerone commented Aug 22, 2024

We got this working:

stages:
  - stage: Build
    displayName: Build

    jobs:
      - job: build
        displayName: EAS Build for Android and iOS

        pool: Default

        steps:
          - checkout: self
            clean: true

          - task: NodeTool@0
            displayName: "Install Node.js"
            inputs:
              versionSource: "fromFile"
              versionFilePath: ".nvmrc"

          - bash: npm ci --no-fund
            displayName: "Install NPM dependencies"

          - bash: npm install -g eas-cli
            displayName: "Install EAS CLI"

          # note: `platform all` here means iOS and Android, not Web.
          - bash: eas build --platform all --profile preview --no-wait --non-interactive
            displayName: "Build on EAS"
            env:
              EXPO_TOKEN: $(EXPO_TOKEN)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment