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'
@mrk-han
Copy link
Author

mrk-han commented Mar 5, 2024

@NasTheRobotKing Where do you want to deploy it? To expo go, or app stores?

@Alex25197
Copy link

Hey, nice script there, got a question, how you can add up env variables into it? Since in my project i'm using the .env file to store variables, how you could read from there or is there any other way to access them?

@NasTheRobotKing
Copy link

NasTheRobotKing commented Apr 4, 2024 via email

@adrianflda
Copy link

Hi everyone
I am trying to do almost the same but deploy android and play.store, could someone help me with a very similar example including adroid deployment?

Thanks

@jerone
Copy link

jerone commented Jun 3, 2024

The EAS Build keeps returning with the question: √ Do you want to log in to your Apple account?...
Does anyone know a work-around?
Android build is no issue.

@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