Skip to content

Commit

Permalink
chore(ci): test start-stop aws instance
Browse files Browse the repository at this point in the history
  • Loading branch information
soonum committed Nov 19, 2024
1 parent 801df0b commit 0b44a29
Show file tree
Hide file tree
Showing 9 changed files with 214 additions and 47 deletions.
19 changes: 19 additions & 0 deletions .github/workflows/registered_runner.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# This simple workflow is used to test if a runner is registered on GitHub platform.
name: Test registered runner

on:
workflow_call:
inputs:
runner-name:
required: true
type: string

jobs:
test-runner:
name: Test Runner
runs-on: ${{ inputs.runner-name }}
timeout-minutes: 5 # Job should be picked very quickly
steps:
- name: Checkout
id: checkout
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871
22 changes: 22 additions & 0 deletions .github/workflows/removed_runner.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# This simple workflow is used to test if a runner is removed from GitHub platform.
name: Test registered runner

on:
workflow_call:
inputs:
runner-name:
required: true
type: string
exist-ok:
type: boolean
default: false

jobs:
test-removed-runner:
name: Test Removed Runner
runs-on: ubuntu-latest
steps:
- name: Check removal
id: checkout
run: |
echo "1"
44 changes: 44 additions & 0 deletions .github/workflows/test_javascript.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
name: Test Javascript

on:
workflow_dispatch:
pull_request:
push:
branches:
- main

permissions:
contents: read

jobs:
test-javascript:
name: JavaScript Tests
runs-on: ubuntu-latest

steps:
- name: Checkout
id: checkout
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871

- name: Setup Node.js
id: setup-node
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af
with:
node-version-file: .node-version
cache: npm

- name: Install Dependencies
id: npm-ci
run: npm ci

- name: Check Format
id: npm-format-check
run: npm run format:check

- name: Lint
id: npm-lint
run: npm run lint

- name: Test
id: npm-ci-test
run: npm run ci-test
86 changes: 86 additions & 0 deletions .github/workflows/test_spawn_terminate.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
# Test action to spawn/terminate backend instance
name: Test Spawn-Terminate

on:
workflow_dispatch:
pull_request:
push:
branches:
- main

permissions:
contents: read

jobs:
action-start:
name: GitHub Actions Test (spawn)
runs-on: ubuntu-latest
strategy:
matrix:
provider: [ aws, hyperstack ]
fail-fast: false
outputs:
runner-aws: ${{ steps.gen-output.outputs.runner_aws }}
runner-hyperstack: ${{ steps.gen-output.outputs.runner_hyperstack }}
steps:
- name: Checkout
id: checkout
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871

- name: Test start instance
id: test-start
uses: ./
with:
mode: start
github-token: ${{ secrets.SLAB_ACTION_TOKEN }}
slab-url: ${{ secrets.SLAB_BASE_URL_PRE_PROD }}
job-secret: ${{ secrets.JOB_SECRET }}
backend: ${{ matrix.provider }}
profile: ci-test

- name: Generate output
id: gen-output
run: |
echo "runner_${{ matrix.provider }}=${{ steps.test-start.outputs.label }}" >> "$GITHUB_OUTPUT"
test-runner-alive:
name: Test runner is alive
runs-on: ubuntu-latest
needs: [ action-start ]
strategy:
matrix:
runner: [ fromJSON(needs.action-start.outputs) ]
fail-fast: false
steps:
- name: Checkout
id: checkout
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871

- name: Run job self-hosted runner
uses: ./.github/workflows/registered_runner.yml
with:
runner-name: ${{ matrix.runner }}

action-stop:
name: GitHub Actions Test (terminate)
runs-on: ubuntu-latest
needs: [ action-start, test-runner-alive ]
strategy:
matrix:
runner: [ fromJSON(needs.action-start.outputs) ]
fail-fast: false
steps:
- name: Checkout
id: checkout
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871

- name: Test stop instance
id: test-stop
if: ${{ always() }}
uses: ./
with:
mode: stop
github-token: ${{ secrets.SLAB_ACTION_TOKEN }}
slab-url: ${{ secrets.SLAB_BASE_URL_PRE_PROD }}
job-secret: ${{ secrets.JOB_SECRET }}
label: ${{ matrix.runner }}
70 changes: 29 additions & 41 deletions .github/workflows/ci.yml → .github/workflows/test_start_stop.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
name: Continuous Integration
# Test action to start/stop already provisioned backend instance.
name: Test Start-Stop

on:
workflow_dispatch:
Expand All @@ -11,60 +12,47 @@ permissions:
contents: read

jobs:
test-javascript:
name: JavaScript Tests
action-start:
name: GitHub Actions Test (start)
runs-on: ubuntu-latest

steps:
- name: Checkout
id: checkout
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871

- name: Setup Node.js
id: setup-node
uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af
- name: Test start instance
id: test-start
uses: ./
with:
node-version-file: .node-version
cache: npm

- name: Install Dependencies
id: npm-ci
run: npm ci

- name: Check Format
id: npm-format-check
run: npm run format:check

- name: Lint
id: npm-lint
run: npm run lint

- name: Test
id: npm-ci-test
run: npm run ci-test
mode: start
github-token: ${{ secrets.SLAB_ACTION_TOKEN }}
slab-url: ${{ secrets.SLAB_BASE_URL_PRE_PROD }}
job-secret: ${{ secrets.JOB_SECRET }}
backend: aws
profile: ci-test-start-stop

test-action:
name: GitHub Actions Test
test-runner-alive:
name: Test runner is alive
runs-on: ubuntu-latest
strategy:
matrix:
provider: [ aws, hyperstack ]
fail-fast: false
needs: [ action-start ]
steps:
- name: Checkout
id: checkout
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871

- name: Test start instance
id: test-start
uses: ./
- name: Test runner is alive
uses: ./.github/workflows/registered_runner.yml
with:
mode: start
github-token: ${{ secrets.SLAB_ACTION_TOKEN }}
slab-url: ${{ secrets.SLAB_BASE_URL_PRE_PROD }}
job-secret: ${{ secrets.JOB_SECRET }}
backend: ${{ matrix.provider }}
profile: ci-test
runner-name: ci-persistent-runner

action-stop:
name: GitHub Actions Test (stop)
runs-on: ubuntu-latest
needs: [ action-start, test-runner-alive ]
steps:
- name: Checkout
id: checkout
uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871

- name: Test stop instance
id: test-stop
Expand All @@ -75,4 +63,4 @@ jobs:
github-token: ${{ secrets.SLAB_ACTION_TOKEN }}
slab-url: ${{ secrets.SLAB_BASE_URL_PRE_PROD }}
job-secret: ${{ secrets.JOB_SECRET }}
label: ${{ steps.test-start.outputs.label }}
label: ci-persistent-runner
8 changes: 8 additions & 0 deletions ci/slab.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,14 @@ image_id = "ami-01d21b7be69801c2f" # Ubuntu 22.04
instance_type = "t3.2xlarge"
user = "ubuntu"

# This instance is a persistent one with a runner already registered
[backend.aws.ci-test-start-stop]
region = "eu-west-3"
image_id = "ami-01d21b7be69801c2f" # Ubuntu 22.04
instance_type = "t3.2xlarge"
instance_id = "i-042a592f53f5ab592"
runner_name = "ci-persistent-runner"

[backend.hyperstack.ci-test]
environment_name = "canada"
image_name = "Ubuntu Server 22.04 LTS R535 CUDA 12.2"
Expand Down
6 changes: 3 additions & 3 deletions dist/index.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions src/gh.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ async function getRunner(label) {
repo: config.githubContext.repo
}
)
const foundRunners = _.filter(runners, { labels: [{ name: label }] })
const foundRunners = _.filter(runners, { name: label })
return foundRunners.length > 0 ? foundRunners[0] : null
} catch (error) {
return null
Expand All @@ -35,7 +35,7 @@ async function waitForRunnerRegistered(label) {
)
await utils.sleep(quietPeriodSeconds)
core.info(
`Checking every ${retryIntervalSeconds}s if the GitHub self-hosted runner is registered`
`Checking every ${retryIntervalSeconds}s if the GitHub self-hosted runner is registered (runner: ${label})`
)

while (waitSeconds < timeoutSeconds) {
Expand Down
2 changes: 1 addition & 1 deletion src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ async function stop() {
)
await slab.waitForInstance(stop_instance_response.task_id, 'stop')

core.info('Instance sucessfully terminated')
core.info('Instance successfully terminated')
}

async function run() {
Expand Down

0 comments on commit 0b44a29

Please sign in to comment.