Skip to content

Commit

Permalink
Add integration test
Browse files Browse the repository at this point in the history
  • Loading branch information
Taucher2003 committed Nov 14, 2023
1 parent 267e05f commit 032779b
Show file tree
Hide file tree
Showing 6 changed files with 142 additions and 0 deletions.
24 changes: 24 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: Run Integration test

on:
push:
pull_request:

jobs:
integration-test:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- run: docker compose up -d
working-directory: test
- run: test/await_healthy.sh
- uses: ./
name: Run test
with:
GL_SERVER_URL: http://127.0.0.1:8080
GL_PROJECT_ID: '1000'
GL_RUNNER_TOKEN: some_long_runner_token
GL_API_TOKEN: TEST1234567890123456
- run: docker compose down
working-directory: test
1 change: 1 addition & 0 deletions lib/action/pipeline_awaiter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ def wait!
puts "Pipeline succeeded in #{duration} minutes!"
return
else
puts
puts "Pipeline #{status} in #{duration} minutes!"
raise PipelineFailed, 'Pipeline did not succeed!'
end
Expand Down
1 change: 1 addition & 0 deletions lib/action/step/start_runner.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ def execute
'Binds' => [
'/var/run/docker.sock:/var/run/docker.sock:ro'
],
'NetworkMode' => 'host'
}
)

Expand Down
35 changes: 35 additions & 0 deletions test/await_healthy.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#!/usr/bin/env bash

CONTAINER_ENGINE="${CONTAINER_ENGINE:-docker}"
GITLAB_BASE_URL="${GITLAB_BASE_URL:-http://127.0.0.1:8080}"

set -e

if [ "$CONTAINER_ENGINE" != "docker" ]; then
echo "Using container engine $CONTAINER_ENGINE"
fi

printf 'Waiting for GitLab container to become healthy'

until test -n "$($CONTAINER_ENGINE ps --quiet --filter label=gitlab-pipeline-action/owned --filter health=healthy)"; do
printf '.'
sleep 5
done

echo
echo "GitLab is healthy at $GITLAB_BASE_URL"

# Print the version, since it is useful debugging information.
curl --silent --show-error --header "Private-Token: TEST1234567890123456" "$GITLAB_BASE_URL/api/v4/version"

echo
printf 'Waiting for Test project to be imported'

import_status=""
while [[ "$import_status" != "finished" ]]; do
printf '.'
import_status=$(curl --silent --show-error --header "Private-Token: TEST1234567890123456" "$GITLAB_BASE_URL/api/v4/projects/1000" | jq -r .import_status)
sleep 5
done

echo
19 changes: 19 additions & 0 deletions test/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
services:
gitlab-ce:
image: gitlab/gitlab-ce:${GITLAB_CE_VERSION:-latest}
restart: always
ports:
- 8080:80
environment:
GITLAB_ROOT_PASSWORD: routrout
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://127.0.0.1:8080'
nginx[:listen_port] = 80
labels:
gitlab-pipeline-action/owned: ''
volumes:
- ./healthcheck_and_setup.sh:/healthcheck_and_setup.sh:Z
healthcheck:
test: /healthcheck_and_setup.sh
interval: 10s
timeout: 3m
62 changes: 62 additions & 0 deletions test/healthcheck_and_setup.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
#!/usr/bin/env sh

# This script is intended to be used as a Docker HEALTHCHECK for the GitLab container.
# It prepares GitLab prior to running tests.
#
# This is a known workaround for docker-compose lacking lifecycle hooks.
# See: https://github.com/docker/compose/issues/1809#issuecomment-657815188

set -e

# Check for a successful HTTP status code from GitLab.
curl --silent --show-error --fail --output /dev/null 127.0.0.1:80

# Because this script runs on a regular health check interval,
# this file functions as a marker that tells us if initialization already finished.
done=/var/gitlab-test-initialized

test -f $done || {
echo 'Initializing GitLab for tests'

echo 'Creating access token'
(
printf 'token = PersonalAccessToken.create('
printf 'user_id: 1, '
printf 'scopes: [:api, :write_repository], '
printf 'expires_at: Time.now + 30.days, '
printf 'name: :token);'
printf "token.set_token('TEST1234567890123456');"
printf 'token.save!;'

printf 'settings = ApplicationSetting.current;'
printf 'settings.import_sources << "git";'
printf 'settings.save!;'

printf 'Projects::CreateService.new(User.find(1), {'
printf 'namespace_id: User.first.namespace.id,'
printf 'name: "Test",'
printf 'path: "test",'
printf 'id: 1000,'
printf 'import_type: "git",'
printf 'import_url: "https://github.com/Taucher2003/Gitlab-Pipeline-Action.git"'
printf '}).execute;'

printf 'Ci::Runners::CreateRunnerService.new('
printf 'user: User.first,'
printf 'params: {'
printf 'runner_type: "instance_type",'
printf 'token: "some_long_runner_token"'
printf '}'
printf ').execute;'

printf 'Ci::ChangeVariableService.new('
printf 'container: Project.find(1000),'
printf 'current_user: User.first,'
printf 'params: { action: :create, variable_params: { key: "GIT_STRATEGY", value: "none", protected: false } }'
printf ').execute;'
) | gitlab-rails console

touch $done
}

echo 'GitLab is ready for tests'

0 comments on commit 032779b

Please sign in to comment.