49 Commits

Author SHA1 Message Date
Vilius Sutkus '89
07976c6290 [CI] Don't log licenses 2023-11-25 18:10:19 +02:00
Vilius Sutkus '89
56927e38e2 Update npm dependencies 2023-11-25 18:04:24 +02:00
Vilius Sutkus '89
eb7920b260 Implement action input parameter 'packages' 2023-11-25 17:41:26 +02:00
Vilius Sutkus '89
a86cdbf03d [CI] Call this action by calling action.yml
action.yml has default input arguments. Would rather not duplicate them in CI workflow
2023-11-25 17:25:16 +02:00
Vilius Sutkus '89
713cbf481b [README.md] Update wording about licenses 2023-11-25 17:22:28 +02:00
Vilius Sutkus '89
1297b09c09 [CI] List installed packages 2023-11-25 17:21:46 +02:00
Vilius Sutkus '89
d24156dbc9 [README.md] Add a note about installed packages 2023-11-21 22:41:46 +02:00
Vilius Sutkus '89
ade8112388 Change "Licence" to "License" 2023-11-21 22:35:25 +02:00
Vilius Sutkus '89
aeaba18a12 [Issue #384] Implement silent licence agreement. 2023-11-21 22:11:35 +02:00
Vilius Sutkus '89
423241b186 Don't eslint warn about English text in string literals 2023-11-21 21:35:16 +02:00
Vilius Sutkus '89
4113fd9036 [CI] Test all cmdlinetools versions 2023-11-21 21:32:42 +02:00
Vilius Sutkus '89
0549df86ae Update npm dependencies 2023-11-21 21:27:27 +02:00
Vilius Sutkus '89
b6023dae3a [CI] Update actions/setup-node to v4 2023-11-21 21:25:54 +02:00
Vilius Sutkus '89
ded9227d6b [CI] Update actions/checkout to v4 2023-11-21 21:25:09 +02:00
Vilius Sutkus '89
449627e76b Format file to match correct "desired" width. Remove leftover debug printout 2023-11-21 21:22:57 +02:00
Vilius Sutkus '89
8023252681 [Issue #192] Accept cmdline-tools-version input parameter 2023-11-21 21:18:33 +02:00
Vilius Sutkus '89
9584f05408 [README.md] Update version of this action 2023-09-25 04:30:57 +03:00
dependabot[bot]
13f81365a4 Bump github/codeql-action from 1 to 2
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 1 to 2.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v1...v2)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-25 03:55:25 +03:00
Vilius Sutkus '89
110787489d [README.md] Update JDK version in step name 2023-09-25 03:53:50 +03:00
Vilius Sutkus '89
4ba30747dc [CI] Use Temurin JDK. Adopt JDK is discontinued
( according to https://github.com/actions/setup-java#supported-distributions )
2023-09-25 03:53:00 +03:00
Omar Shehata
a3da945276 Fix README example 2023-09-25 03:48:44 +03:00
Vilius Sutkus '89
1cb03f027b Update node dependencies & Rebuild 2023-09-25 03:37:15 +03:00
Vilius Sutkus '89
ccc0939481 Use Node-20 instead of end-of-life Node-16
Would prefer to use Node-18, because it's LTS, but I can't, because it's not available:
https://github.com/actions/runner-images/discussions/7664
2023-09-25 03:20:06 +03:00
Vilius Sutkus '89
fabcc053ca [CI] Add macos-13 to test matrix 2023-09-25 03:14:01 +03:00
Vilius Sutkus '89
bee5ac3f90 Update cmdline-tools to 11.0 (latest) 2023-09-25 03:04:50 +03:00
Vilius Sutkus '89
26c86ac3f5 Update JDK to 17 (from 1.8). Required for current cmdline-tools 2023-09-25 03:03:19 +03:00
Vilius Sutkus '89
bc52f43eb3 [CI] Remove ubuntu-18.04 from test matrix 2023-09-25 03:02:55 +03:00
Simon Marquis
899d70efad Update commandlinetools version to 9.0 (latest)
https://developer.android.com/studio#command-line-tools-only
2023-09-25 02:57:03 +03:00
Vilius Sutkus '89
7c5672355a Rebuild 2022-10-18 22:49:38 +03:00
Vilius Sutkus '89
be14762587 Update dependencies 2022-10-18 22:48:21 +03:00
dependabot[bot]
02a4c0fae6 Bump @actions/cache from 3.0.0 to 3.0.5
Bumps [@actions/cache](https://github.com/actions/toolkit/tree/HEAD/packages/cache) from 3.0.0 to 3.0.5.
- [Release notes](https://github.com/actions/toolkit/releases)
- [Changelog](https://github.com/actions/toolkit/blob/main/packages/cache/RELEASES.md)
- [Commits](https://github.com/actions/toolkit/commits/HEAD/packages/cache)

---
updated-dependencies:
- dependency-name: "@actions/cache"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-18 22:35:00 +03:00
dependabot[bot]
4963c9b31a Bump @actions/core from 1.9.0 to 1.10.0
Bumps [@actions/core](https://github.com/actions/toolkit/tree/HEAD/packages/core) from 1.9.0 to 1.10.0.
- [Release notes](https://github.com/actions/toolkit/releases)
- [Changelog](https://github.com/actions/toolkit/blob/main/packages/core/RELEASES.md)
- [Commits](https://github.com/actions/toolkit/commits/HEAD/packages/core)

---
updated-dependencies:
- dependency-name: "@actions/core"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-18 22:32:16 +03:00
Vilius Sutkus '89
2741e25473 Update README.md 2022-08-03 16:44:44 +03:00
Vilius Sutkus '89
ed89994087 Merge branch 'main' of github.com:android-actions/setup-android 2022-08-03 16:38:34 +03:00
Vilius Sutkus '89
240c9729bd Downgrade @types/node to 16, because we are using node LTS - 16. 2022-08-03 16:14:58 +03:00
Vilius Sutkus '89
36d0d24ca4 Update dependencies 2022-08-03 16:09:19 +03:00
Vilius Sutkus '89
cabf29c9ef [CI] Update "rebuild needed" check 2022-08-03 15:56:56 +03:00
Vilius Sutkus '89
65b8c7bc99 [CI] Add a "rebuild needed" check 2022-08-03 15:27:53 +03:00
Vilius Sutkus '89
34f33aad26 Use Node16 (current LTS), instead of Node12 2022-08-03 15:23:56 +03:00
Vilius Sutkus '89
3d201fcd51 Update cmdline-tools version to 7.0 2022-08-03 15:19:19 +03:00
Vilius Sutkus '89
1ba064a8a2 [2/2] Read version of cmdline-tools/latest, if version is correct - use it 2022-08-03 15:19:19 +03:00
Vilius Sutkus '89
4360e92aa0 Read version of cmdline-tools/latest, if version is correct - use it 2022-08-03 15:19:19 +03:00
Vilius Sutkus '89
88c04cbb34 [CI] Remove macos-10.15, because it is deprecated 2022-08-03 15:19:19 +03:00
Vilius Sutkus '89
239c6f5c7c [CI] Update test matrix to include ubuntu-22.04 and macos-12 2022-08-03 15:19:19 +03:00
Vilius Sutkus '89
882b1d3cd5 Update cmdline-tools version to 7.0 2022-08-03 15:03:16 +03:00
Vilius Sutkus '89
00dbb341f0 [2/2] Read version of cmdline-tools/latest, if version is correct - use it 2022-08-03 15:02:48 +03:00
Vilius Sutkus '89
c1ac9c4be4 Read version of cmdline-tools/latest, if version is correct - use it 2022-08-03 15:00:44 +03:00
Vilius Sutkus '89
0f0da39d59 [CI] Remove macos-10.15, because it is deprecated 2022-08-03 13:39:25 +03:00
Vilius Sutkus '89
c6c2260dde [CI] Update test matrix to include ubuntu-22.04 and macos-12 2022-08-03 13:36:32 +03:00
11 changed files with 31293 additions and 7751 deletions

View File

@@ -44,7 +44,7 @@
"semi": "off", "semi": "off",
"@typescript-eslint/semi": ["error", "never"], "@typescript-eslint/semi": ["error", "never"],
"@typescript-eslint/type-annotation-spacing": "error", "@typescript-eslint/type-annotation-spacing": "error",
"i18n-text/no-en": "warn", "i18n-text/no-en": "off",
"@typescript-eslint/unbound-method": "error" "@typescript-eslint/unbound-method": "error"
}, },
"env": { "env": {

View File

@@ -15,26 +15,29 @@ jobs:
build: build:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Setup node 12 - name: Setup node 20
uses: actions/setup-node@v3 uses: actions/setup-node@v4
with: with:
node-version: '12' node-version: 20
- run: npm ci - run: npm ci
- run: npm run build - run: npm run build
- name: Check if dist/index.js needs to be rebuilt
run: diff <(git status dist/index.js --short) <(echo -n "")
format-check: format-check:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Setup node 12 - name: Setup node 20
uses: actions/setup-node@v3 uses: actions/setup-node@v4
with: with:
node-version: '12' node-version: 20
- run: npm ci - run: npm ci
@@ -43,12 +46,12 @@ jobs:
test: test:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Setup node 12 - name: Setup node 20
uses: actions/setup-node@v3 uses: actions/setup-node@v4
with: with:
node-version: '12' node-version: 20
- run: npm ci - run: npm ci
@@ -56,35 +59,53 @@ jobs:
runSdkManager: runSdkManager:
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
name: ${{ matrix.os }} - ${{ matrix.cmdline-tools-version }}
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
os: [ ubuntu-18.04, ubuntu-20.04, macos-10.15, macos-11, windows-2019, windows-2022 ] os: [ ubuntu-20.04, ubuntu-22.04, macos-11, macos-12, macos-13, windows-2019, windows-2022 ]
cmdline-tools-version:
- 10406996
- 9862592
- 9477386
- 9123335
- 8512546
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Setup node 12 - name: Setup node 20
uses: actions/setup-node@v3 uses: actions/setup-node@v4
with: with:
node-version: '12' node-version: 20
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: 17
distribution: 'temurin'
- run: npm ci - run: npm ci
- run: npm run build - run: npm run build
- run: node dist/index.js - name: Run setup-android
uses: ./
with:
cmdline-tools-version: ${{ matrix.cmdline-tools-version }}
log-accepted-android-sdk-licenses: 'false'
- run: sdkmanager --list_installed
- run: sdkmanager --list - run: sdkmanager --list
lint: lint:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Setup node 12 - name: Setup node 20
uses: actions/setup-node@v3 uses: actions/setup-node@v4
with: with:
node-version: '12' node-version: 20
- run: npm ci - run: npm ci

View File

@@ -31,13 +31,13 @@ jobs:
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v3 uses: actions/checkout@v4
# Initializes the CodeQL tools for scanning. # Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL - name: Initialize CodeQL
uses: github/codeql-action/init@v1 uses: github/codeql-action/init@v2
with: with:
languages: 'javascript' languages: 'javascript'
- name: Perform CodeQL Analysis - name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1 uses: github/codeql-action/analyze@v2

View File

@@ -27,19 +27,19 @@ jobs:
if: ${{ false }} if: ${{ false }}
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
with: with:
repository: daveol/SampleApplication repository: daveol/SampleApplication
- uses: actions/checkout@v3 - uses: actions/checkout@v4
with: with:
path: ./build/ path: ./build/
- name: Set up JDK 1.8 - name: Set up JDK 17
uses: actions/setup-java@v3 uses: actions/setup-java@v3
with: with:
java-version: 1.8 java-version: 17
distribution: 'adopt' distribution: 'temurin'
- name: Setup Android SDK - name: Setup Android SDK
id: 'setup-android' id: 'setup-android'

6
.idea/vcs.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

View File

@@ -3,9 +3,18 @@
![Build & Test](https://github.com/android-actions/setup-android/workflows/Build%20&%20Test/badge.svg) ![Build & Test](https://github.com/android-actions/setup-android/workflows/Build%20&%20Test/badge.svg)
This action sets up the Android SDK tools by: This action sets up the Android SDK tools by:
- Downloading the SDK commandline tools - Downloading the SDK commandline tools, if the current version (11.0) is not found in either `$ANDROID_SDK_ROOT` or `$HOME/.android/sdk`.
- Accepting the SDK licenses - Accepting the SDK licenses.
- Installing `tools` and `platform-tools`.
- Adding `platform-tools` (contains adb) and `cmdline-tools/11.0/bin` (contains sdkmanager) to `$PATH`.
- Setting up problem [matchers](/matchers.json).
On Windows 2016 runners, this action also checks if `$ANDROID_SDK_ROOT` path contains spaces.
If it does - it moves SDK to a path without spaces. This is needed because spaces are highly problematic:
```
C:\windows\system32\cmd.exe /D /S /C ""C:\Program Files (x86)\Android\android-sdk\cmdline-tools\3.0\bin\sdkmanager.bat" --licenses"
Error: Could not find or load main class Files
```
# Usage # Usage
@@ -14,20 +23,75 @@ See [action.yml](action.yml)
## Basic ## Basic
```yaml ```yaml
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Set up JDK 1.8 - name: Set up JDK 17
uses: actions/setup-java@v3 uses: actions/setup-java@v3
with: with:
java-version: 1.8 java-version: '17'
distribution: 'temurin'
- name: Setup Android SDK - name: Setup Android SDK
uses: android-actions/setup-android@v2 uses: android-actions/setup-android@v3
- name: Build SampleApplication - name: Build SampleApplication
run: ./gradlew --no-daemon build run: ./gradlew --no-daemon build
``` ```
## Additional packages
Input parameter `packages` controls which packages this action will install from Android SDK.
Default value is `tools platform-tools`, supply an empty string to skip installing additional packages.
Additional packages can be installed at a later time by calling sdkmanager manually.
```yaml
- name: Setup Android SDK
uses: android-actions/setup-android@v3
with:
packages: ''
# ...
- run: sdkmanager tools platform-tools
```
## SDK Version selection
Command line tools are versioned using two variables - short and long.
Long one is the build number, used in the zip URL, short one is the human friendly version name.
By default, setup-android installs version 10406996 (short version 11.0).
To install a different version, call setup-android with desired long version as the input parameter `cmdline-tools-version`:
```yaml
- name: Setup Android SDK
uses: android-actions/setup-android@v3
with:
cmdline-tools-version: 8512546
```
#### Version table
| Short version | Long version |
| --- | --- |
| 11.0 | 10406996 |
| 10.0 | 9862592 |
| 9.0 | 9477386 |
| 8.0 | 9123335 |
| 7.0 | 8512546 |
Current cmdline tools version can be found at https://developer.android.com/studio#command-line-tools-only
# Android SDK Licenses
Android SDK is not public domain software, it comes with a license.
Input parameter `accept-android-sdk-licenses` decides if Android SDK licenses should be agreed to on behalf of the user of this action.
Default option is 'yes', because otherwise SDK is unusable until said licenses are agreed to.
licenses are quite long, to prevent a wall of text in the action output, licenses can be agreed to silently.
Input parameter `log-accepted-android-sdk-licenses` controls whether license texts should be printed or omitted from the text output. Defaults to 'true'.
# Thanks # Thanks
Based on the project [android-problem-matchers-action](https://github.com/jonasb/android-problem-matchers-action) from [@jonasb](https://github.com/jonasb) Based on the project [android-problem-matchers-action](https://github.com/jonasb/android-problem-matchers-action) from [@jonasb](https://github.com/jonasb)

View File

@@ -2,8 +2,29 @@ name: 'Setup Android SDK Tools'
author: 'Android-Actions' author: 'Android-Actions'
description: 'Setup the Android SDK Tools and add them to the path' description: 'Setup the Android SDK Tools and add them to the path'
inputs:
cmdline-tools-version:
description: 'cmdline-tools-version. See https://developer.android.com/studio#command-line-tools-only'
required: false
default: '10406996'
accept-android-sdk-licenses:
description: 'Android SDK is usable only after the license agreement. Should setup-android agree to the licences, provided by "sdkmanager --licenses"'
required: false
default: 'true'
log-accepted-android-sdk-licenses:
description: 'Should accepted licenses be logged. If not, accepted licences will be accepted silently'
required: false
default: 'true'
packages:
description: 'Additional packages to install'
required: false
default: 'tools platform-tools'
runs: runs:
using: 'node12' using: node20
main: 'dist/index.js' main: 'dist/index.js'
branding: branding:

28821
dist/index.js vendored

File diff suppressed because one or more lines are too long

9764
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -25,26 +25,24 @@
"author": "daveol", "author": "daveol",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@actions/cache": "^2.0.2", "@actions/cache": "^3.2.2",
"@actions/core": "^1.3.0", "@actions/core": "^1.10.1",
"@actions/tool-cache": "^1.6.1", "@actions/tool-cache": "^2.0.1"
"fs-extra": "^10.0.0"
}, },
"devDependencies": { "devDependencies": {
"@types/fs-extra": "^9.0.11", "@types/jest": "^29.5.5",
"@types/jest": "^27.4.1", "@types/node": "^20.6.5",
"@types/node": "^17.0.25", "@typescript-eslint/eslint-plugin": "^6.7.2",
"@typescript-eslint/eslint-plugin": "^5.20.0", "@typescript-eslint/parser": "^6.7.2",
"@typescript-eslint/parser": "^5.20.0", "@vercel/ncc": "^0.38.0",
"@vercel/ncc": "^0.33.4", "eslint": "^8.50.0",
"eslint": "^8.13.0", "eslint-plugin-github": "^4.10.0",
"eslint-plugin-github": "^4.3.6", "eslint-plugin-jest": "^27.4.0",
"eslint-plugin-jest": "^26.1.4", "jest": "^29.7.0",
"jest": "^27.5.1", "jest-circus": "^29.7.0",
"jest-circus": "^27.0.6",
"js-yaml": "^4.1.0", "js-yaml": "^4.1.0",
"prettier": "^2.3.0", "prettier": "^3.0.3",
"ts-jest": "^27.1.4", "ts-jest": "^29.1.1",
"typescript": "^4.2.4" "typescript": "^5.2.2"
} }
} }

View File

@@ -3,98 +3,96 @@ import * as tc from '@actions/tool-cache'
import * as exec from '@actions/exec' import * as exec from '@actions/exec'
import * as path from 'path' import * as path from 'path'
import * as fs from 'fs' import * as fs from 'fs'
import * as fse from 'fs-extra'
import * as os from 'os' import * as os from 'os'
const CMDLINE_TOOLS_VERSION = '6.0' function getVersionShort(versionLong: string): string {
const COMMANDLINE_TOOLS_VERSION = '8092744' switch (versionLong) {
case '10406996':
return '11.0'
case '9862592':
return '10.0'
case '9477386':
return '9.0'
case '9123335':
return '8.0'
case '8512546':
return '7.0'
default:
return versionLong
}
}
const COMMANDLINE_TOOLS_WIN_URL = `https://dl.google.com/android/repository/commandlinetools-win-${COMMANDLINE_TOOLS_VERSION}_latest.zip` const VERSION_LONG = core.getInput('cmdline-tools-version', {
const COMMANDLINE_TOOLS_MAC_URL = `https://dl.google.com/android/repository/commandlinetools-mac-${COMMANDLINE_TOOLS_VERSION}_latest.zip` trimWhitespace: true
const COMMANDLINE_TOOLS_LIN_URL = `https://dl.google.com/android/repository/commandlinetools-linux-${COMMANDLINE_TOOLS_VERSION}_latest.zip` })
if (VERSION_LONG.includes('/') || VERSION_LONG.includes('\\')) {
core.setFailed('Malformed cmdline-tools-version!')
throw new Error('Malformed cmdline-tools-version!')
}
const VERSION_SHORT = getVersionShort(VERSION_LONG)
const HOME = os.homedir() const COMMANDLINE_TOOLS_WIN_URL = `https://dl.google.com/android/repository/commandlinetools-win-${VERSION_LONG}_latest.zip`
const ANDROID_HOME_DIR = path.join(HOME, '.android') const COMMANDLINE_TOOLS_MAC_URL = `https://dl.google.com/android/repository/commandlinetools-mac-${VERSION_LONG}_latest.zip`
const ANDROID_HOME_SDK_DIR = path.join(ANDROID_HOME_DIR, 'sdk') const COMMANDLINE_TOOLS_LIN_URL = `https://dl.google.com/android/repository/commandlinetools-linux-${VERSION_LONG}_latest.zip`
const ANDROID_HOME_SDK_DIR = path.join(os.homedir(), '.android', 'sdk')
let ANDROID_SDK_ROOT = process.env['ANDROID_SDK_ROOT'] || ANDROID_HOME_SDK_DIR let ANDROID_SDK_ROOT = process.env['ANDROID_SDK_ROOT'] || ANDROID_HOME_SDK_DIR
function getSdkManagerPath(cmdToolsVersion: string): string { async function callSdkManager(
return path.join( sdkManager: string,
ANDROID_SDK_ROOT, arg: string,
'cmdline-tools', printOutput: Boolean = true
cmdToolsVersion, ): Promise<void> {
'bin',
'sdkmanager'
)
}
function findPreinstalledSdkManager(): {
isFound: boolean
isCorrectVersion: boolean
exePath: string
} {
const result = {isFound: false, isCorrectVersion: false, exePath: ''}
// First try to find the version defined in CMDLINE_TOOLS_VERSION
result.exePath = getSdkManagerPath(CMDLINE_TOOLS_VERSION)
result.isFound = fs.existsSync(result.exePath)
if (result.isFound) {
result.isCorrectVersion = true
return result
}
// cmdline-tools could have a 'latest' version, but if it was installed 2 years ago
// it may not be 'latest' as of today
result.exePath = getSdkManagerPath('latest')
result.isFound = fs.existsSync(result.exePath)
if (result.isFound) {
return result
}
result.exePath = ''
// Find whatever version is available in ANDROID_SDK_ROOT
const cmdlineToolsDir = path.join(ANDROID_SDK_ROOT, 'cmdline-tools')
const foundVersions: string[] = fs.existsSync(cmdlineToolsDir)
? fs.readdirSync(cmdlineToolsDir)
: []
const foundVersionsFiltered: string[] = foundVersions.filter(
obj => '.' !== obj && '..' !== obj
)
// Sort by desc, to get 2.0 first, before 1.0
const foundVersionsSorted: string[] = foundVersionsFiltered.sort(
(a: string, b: string) => (a > b ? -1 : 1)
)
for (const version of foundVersionsSorted) {
result.exePath = getSdkManagerPath(version)
result.isFound = fs.existsSync(result.exePath)
if (result.isFound) {
return result
}
}
result.exePath = ''
return result
}
async function callSdkManager(sdkManager: string, arg: string): Promise<void> {
const acceptBuffer = Buffer.from(Array(10).fill('y').join('\n'), 'utf8') const acceptBuffer = Buffer.from(Array(10).fill('y').join('\n'), 'utf8')
await exec.exec(sdkManager, [arg], { await exec.exec(sdkManager, [arg], {
input: acceptBuffer input: acceptBuffer,
silent: !printOutput
}) })
} }
async function installSdkManager(): Promise<string> { async function installSdkManager(): Promise<string> {
fs.mkdirSync(ANDROID_SDK_ROOT, {recursive: true}) const cmdlineTools = path.join(
ANDROID_SDK_ROOT,
// touch $ANDROID_SDK_ROOT/repositories.cfg 'cmdline-tools',
fs.closeSync( VERSION_SHORT
fs.openSync(path.join(ANDROID_SDK_ROOT, 'repositories.cfg'), 'w')
) )
let sdkManagerExe = path.join(cmdlineTools, 'bin', 'sdkmanager')
const sdkManager = findPreinstalledSdkManager() if (!fs.existsSync(sdkManagerExe)) {
if (!sdkManager.isFound) { const latestCmdlineTools = path.join(
ANDROID_SDK_ROOT,
'cmdline-tools',
'latest'
)
const sourcePropertiesFile = path.join(
latestCmdlineTools,
'source.properties'
)
const latestSdkManagerExe = path.join(
latestCmdlineTools,
'bin',
'sdkmanager'
)
if (
fs.existsSync(latestCmdlineTools) &&
fs.existsSync(sourcePropertiesFile) &&
fs.existsSync(latestSdkManagerExe)
) {
const sourceProperties = fs.readFileSync(sourcePropertiesFile)
core.info(
`Found preinstalled sdkmanager in ${latestCmdlineTools} with following source.properties:`
)
core.info(sourceProperties.toString())
if (sourceProperties.includes(`Pkg.Revision=${VERSION_SHORT}`)) {
core.info(`Preinstalled sdkmanager has the correct version`)
sdkManagerExe = latestSdkManagerExe
} else {
core.info(`Wrong version in preinstalled sdkmanager`)
}
}
}
if (!fs.existsSync(sdkManagerExe)) {
let cmdlineToolsURL let cmdlineToolsURL
if (process.platform === 'linux') { if (process.platform === 'linux') {
cmdlineToolsURL = COMMANDLINE_TOOLS_LIN_URL cmdlineToolsURL = COMMANDLINE_TOOLS_LIN_URL
@@ -106,43 +104,27 @@ async function installSdkManager(): Promise<string> {
core.error(`Unsupported platform: ${process.platform}`) core.error(`Unsupported platform: ${process.platform}`)
return '' return ''
} }
core.info(`Downloading commandline tools from ${cmdlineToolsURL}`)
const cmdlineToolsZip = await tc.downloadTool(cmdlineToolsURL) const cmdlineToolsZip = await tc.downloadTool(cmdlineToolsURL)
const cmdlineToolsExtractedLocation = await tc.extractZip(cmdlineToolsZip)
// Move cmdline-tools to where it would be if it was installed through sdkmanager const extractTo = path.join(ANDROID_SDK_ROOT, 'cmdline-tools')
// Will allow calling sdkmanager without --sdk_root='..' argument await tc.extractZip(cmdlineToolsZip, extractTo)
const desiredLocation = path.join(
ANDROID_SDK_ROOT,
'cmdline-tools',
CMDLINE_TOOLS_VERSION
)
// Create parent directory
fs.mkdirSync(path.dirname(desiredLocation), {recursive: true})
// Make sure we don't have leftover target directory (happens sometimes...) // Make sure we don't have leftover target directory (happens sometimes...)
if (fs.existsSync(desiredLocation)) fse.removeSync(desiredLocation) if (fs.existsSync(cmdlineTools)) {
core.info(`Removing leftovers from ${cmdlineTools}`)
// @TODO: use io.mv instead of fs-extra.moveSync once following issue is resolved: fs.rmSync(cmdlineTools, {recursive: true})
// https://github.com/actions/toolkit/issues/706 }
fse.moveSync( fs.renameSync(path.join(extractTo, 'cmdline-tools'), cmdlineTools)
path.join(cmdlineToolsExtractedLocation, 'cmdline-tools'),
desiredLocation
)
fse.removeSync(cmdlineToolsExtractedLocation)
sdkManager.exePath = getSdkManagerPath(CMDLINE_TOOLS_VERSION)
sdkManager.isCorrectVersion = true
} }
if (!sdkManager.isCorrectVersion) { // touch $ANDROID_SDK_ROOT/repositories.cfg
await callSdkManager( fs.closeSync(
sdkManager.exePath, fs.openSync(path.join(ANDROID_SDK_ROOT, 'repositories.cfg'), 'w')
`cmdline-tools;${CMDLINE_TOOLS_VERSION}` )
) core.debug(`sdkmanager available at: ${sdkManagerExe}`)
sdkManager.exePath = getSdkManagerPath(CMDLINE_TOOLS_VERSION) return sdkManagerExe
}
return sdkManager.exePath
} }
async function run(): Promise<void> { async function run(): Promise<void> {
@@ -164,17 +146,36 @@ async function run(): Promise<void> {
} }
} }
const sdkManager = await installSdkManager() const sdkManagerExe = await installSdkManager()
core.debug(`sdkmanager installed to: ${sdkManager}`)
await callSdkManager(sdkManager, '--licenses')
await callSdkManager(sdkManager, 'tools')
await callSdkManager(sdkManager, 'platform-tools')
core.setOutput('ANDROID_COMMANDLINE_TOOLS_VERSION', COMMANDLINE_TOOLS_VERSION) if (core.getBooleanInput('accept-android-sdk-licenses')) {
core.info('Accepting Android SDK licenses')
await callSdkManager(
sdkManagerExe,
'--licenses',
core.getBooleanInput('log-accepted-android-sdk-licenses')
)
}
const packages = core
.getInput('packages', {required: false})
.split(' ')
.map(function (str) {
return str.trim()
})
/* eslint-disable-next-line @typescript-eslint/no-unused-vars */
.filter(function (element, index, array) {
return element
})
for (const pkg of packages) {
await callSdkManager(sdkManagerExe, pkg)
}
core.setOutput('ANDROID_COMMANDLINE_TOOLS_VERSION', VERSION_LONG)
core.exportVariable('ANDROID_HOME', ANDROID_SDK_ROOT) core.exportVariable('ANDROID_HOME', ANDROID_SDK_ROOT)
core.exportVariable('ANDROID_SDK_ROOT', ANDROID_SDK_ROOT) core.exportVariable('ANDROID_SDK_ROOT', ANDROID_SDK_ROOT)
core.addPath(path.dirname(sdkManager)) core.addPath(path.dirname(sdkManagerExe))
core.addPath(path.join(ANDROID_SDK_ROOT, 'platform-tools')) core.addPath(path.join(ANDROID_SDK_ROOT, 'platform-tools'))
core.debug('add matchers') core.debug('add matchers')