Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Experiment/ci self hosted runner #15

Open
wants to merge 11 commits into
base: dev1.0
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 3 additions & 14 deletions .github/workflows/manual.yml
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
name: Unit Testing

on:
workflow_dispatch:
push:

# permissions:
# contents: read

jobs:
build:

runs-on: ubuntu-latest
runs-on: self-hosted
env:
PYTHONPATH: ${{ github.workspace }}/backend/src
services:
postgres:
db:
image: postgres
env:
POSTGRES_USER: postgres
Expand Down Expand Up @@ -63,14 +63,6 @@ jobs:
/opt/poetry/bin/poetry install --no-root
- name: Set PYTHONPATH to env
run: echo "PYTHONPATH=${{ github.workspace }}/backend/src" >> "$GITHUB_ENV"
- name: Set POSTGRES_USER to env
run: echo "POSTGRES_USER=postgres" >> "$GITHUB_ENV"
- name: Set POSTGRES_PASSWORD to env
run: echo "POSTGRES_PASSWORD=password" >> "$GITHUB_ENV"
- name: Set POSTGRES_DB to env
run: echo "POSTGRES_DB=app" >> "$GITHUB_ENV"
- name: Set POSTGRES_SERVER to env
run: echo "POSTGRES_SERVER=localhost" >> "$GITHUB_ENV"
- name: current work dir
run: pwd
- name: run test
Expand All @@ -81,6 +73,3 @@ jobs:
echo "PYTHONPATH=${{ github.workspace }}/backend/src" >> "$GITHUB_ENV" &&
python app/tests_pre_start.py &&
bash scripts/test.sh "$@"
- name: Test test script
run: |
bash tests-start.sh "$@"
2 changes: 1 addition & 1 deletion backend/src/app/core/celery_app.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from celery import Celery

celery_app = Celery("worker", broker="amqp://guest@queue//")
celery_app = Celery("worker", broker="amqp://guest@localhost//")

celery_app.conf.task_routes = {"app.worker.test_celery": "main-queue"}
6 changes: 5 additions & 1 deletion backend/src/app/schemas/snippet.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,11 @@ class SnippetCreate(SnippetBase):

# Properties to receive on snippet update
class SnippetUpdate(SnippetCreate):
pass
title: Optional[str]
snippet: Optional[str]
language_id: Optional[int]
links: Optional[List[LinkBase]] = []
tag_ids: Optional[List[int]] = []


# Properties shared by models stored in DB
Expand Down
80 changes: 45 additions & 35 deletions backend/src/app/tests/crud/test_snippet.py
Original file line number Diff line number Diff line change
@@ -1,54 +1,48 @@
import pytest
# from sqlalchemy.orm import Session
from sqlalchemy.ext.asyncio import AsyncSession

from app import crud
from app.schemas import LanguageCreate
from app.schemas.link import LinkCreate
from app.schemas.snippet import SnippetCreate, SnippetUpdate
from app.tests.utils.user import create_random_user
from app.tests.utils.snippet import initialize_data
from app.tests.utils.utils import random_lower_string

pytestmark = pytest.mark.asyncio


async def test_create_snippet(async_get_db: AsyncSession) -> None:
title = random_lower_string()
snippet_text = random_lower_string()
language = LanguageCreate(id=1, name="Java")
snippet_in = SnippetCreate(title=title, snippet=snippet_text, language_id=language.id)
user = await create_random_user(async_get_db)
snippet = await crud.snippet.create_with_owner(db=async_get_db, obj_in=snippet_in, user_id=user.id)
assert snippet.title == title
assert snippet.snippet == snippet_text
assert snippet.language == language
assert snippet.user_id == user.id
save_data = await save_snippet(async_get_db)
snippet = save_data['snippet']
assert snippet.title == save_data['title']
assert snippet.snippet == save_data['snippet_text']
assert snippet.language.name == save_data['language_name']
assert snippet.links[0].url == save_data['link_url']
assert snippet.tags[0].id == 1 # todo get rid of magic number
assert snippet.user_id == save_data['user_id']


async def test_get_snippet(async_get_db: AsyncSession) -> None:
title = random_lower_string()
snippet_text = random_lower_string()
language = LanguageCreate(id=1, name="Java")
snippet_in = SnippetCreate(title=title, snippet=snippet_text, language_id=language.id)
user = await create_random_user(async_get_db)
snippet = await crud.snippet.create_with_owner(db=async_get_db, obj_in=snippet_in, user_id=user.id)
save_data = await save_snippet(async_get_db)
snippet = save_data['snippet']
stored_snippet = await crud.snippet.get(db=async_get_db, id=snippet.id)
assert stored_snippet
assert snippet.id == stored_snippet.id
assert snippet.title == stored_snippet.title
assert snippet.snippet == stored_snippet.snippet
assert snippet.language == language
assert snippet.language.name == save_data['language_name']
assert snippet.user_id == stored_snippet.user_id
assert snippet.links == stored_snippet.links
assert snippet.tags == stored_snippet.tags


async def test_update_snippet(async_get_db: AsyncSession) -> None:
title = random_lower_string()
snippet_text = random_lower_string()
language = LanguageCreate(id=1, name="Java")
snippet_in = SnippetCreate(title=title, snippet=snippet_text, language_id=language.id)
user = await create_random_user(async_get_db)
snippet = await crud.snippet.create_with_owner(db=async_get_db, obj_in=snippet_in, user_id=user.id)
snippet_text2 = random_lower_string()
snippet_update = SnippetUpdate(snippet=snippet_text)
save_data = await save_snippet(async_get_db)
snippet = save_data['snippet']
snippet_text2 = "updated snippet"
snippet_update = SnippetUpdate(snippet=snippet_text2)

snippet2 = await crud.snippet.update(db=async_get_db, db_obj=snippet, obj_in=snippet_update)
assert snippet.id == snippet2.id
assert snippet.title == snippet2.title
Expand All @@ -57,16 +51,32 @@ async def test_update_snippet(async_get_db: AsyncSession) -> None:


async def test_delete_snippet(async_get_db: AsyncSession) -> None:
title = random_lower_string()
snippet_text = random_lower_string()
language = LanguageCreate(id=1, name="Java")
snippet_in = SnippetCreate(title=title, snippet=snippet_text, language_id=language.id)
user = await create_random_user(async_get_db)
snippet = await crud.snippet.create_with_owner(db=async_get_db, obj_in=snippet_in, user_id=user.id)
save_data = await save_snippet(async_get_db)
snippet = save_data['snippet']
snippet2 = await crud.snippet.remove(db=async_get_db, id=snippet.id)
snippet3 = await crud.snippet.get(db=async_get_db, id=snippet.id)
assert snippet3 is None
assert snippet2.id == snippet.id
assert snippet2.title == title
assert snippet2.snippet == snippet_text
assert snippet2.user_id == user.id
assert snippet2.title == save_data['title']
assert snippet2.snippet == save_data['snippet_text']
assert snippet2.user_id == save_data['user_id']


async def save_snippet(async_get_db: AsyncSession) -> dict:
user = await create_random_user(async_get_db)
await initialize_data(async_get_db, user_id=user.id) # todo receive data from here
title = random_lower_string()
snippet_text = random_lower_string()
language = LanguageCreate(id=1, name="Java")
link = LinkCreate(url="https://snip.pet")
snippet_in = SnippetCreate(title=title, snippet=snippet_text, language_id=1, tag_ids=[1], links=[link])
snippet = await crud.snippet.create_with_owner(db=async_get_db, obj_in=snippet_in, user_id=user.id)

return {
'user_id': user.id,
'title': title,
'language_name': language.name,
'link_url': link.url,
'snippet_text': snippet_text,
'snippet': snippet,
}
24 changes: 1 addition & 23 deletions backend/src/app/tests/utils/snippet.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,6 @@
from typing import Optional

from httpx import AsyncClient
from sqlalchemy import select
#from sqlalchemy.orm import Session
from sqlalchemy.ext.asyncio import AsyncSession

from app import crud, models, schemas
from app.core.config import settings
from app.models import Tag
from app.models.language import Language
from app.schemas.link import LinkCreate
from app.schemas.snippet import SnippetCreate
from app.tests.utils.user import create_random_user
Expand All @@ -28,20 +20,6 @@ async def create_random_snippet(db: AsyncSession, *, user_id: Optional[int] = No


async def initialize_data(db: AsyncSession, user_id: Optional[int] = None):
# tags_to_be_deleted = await db.execute(
# select(Tag)
# )
# tags_to_delete = tags_to_be_deleted.scalars().all()
# for tag in tags_to_delete:
# await db.delete(tag)
#
# languages_to_be_deleted = await db.execute(
# select(Language)
# )
# languages_to_delete = languages_to_be_deleted.scalars().all()
# for tag in languages_to_delete:
# await db.delete(tag)

languages = [
{"id": 1, "name": "Java"},
{"id": 2, "name": "Python"},
Expand All @@ -55,4 +33,4 @@ async def initialize_data(db: AsyncSession, user_id: Optional[int] = None):
language = await crud.language.create(db, obj_in=language_in) # noqa: F841
for tag in tags:
tag_in = schemas.TagCreate(name=tag["name"])
tag = await crud.tag.create_with_owner(db, obj_in=tag_in, user_id=user_id) # noqa: F841
tag = await crud.tag.create_with_owner(db, obj_in=tag_in, user_id=user_id) # noqa: F841
1 change: 1 addition & 0 deletions backend/src/app/tests_pre_start.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ async def init() -> None:
await init_db(db=db)
await db.execute("SELECT 1")
logger.info("DATABASE DONE")
await db.close()
except Exception as e:
logger.error(e)
raise e
Expand Down
54 changes: 54 additions & 0 deletions fakenv.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
DOMAIN=localhost
# DOMAIN=local.dockertoolbox.tiangolo.com
# DOMAIN=localhost.tiangolo.com
# DOMAIN=dev.codejavu.com

STACK_NAME=codejavu-com

TRAEFIK_PUBLIC_NETWORK=traefik-public
TRAEFIK_TAG=codejavu.com
TRAEFIK_PUBLIC_TAG=traefik-public

DOCKER_IMAGE_BACKEND=codejavu-backend
DOCKER_IMAGE_CELERYWORKER=celeryworker
DOCKER_IMAGE_FRONTEND=codejavu-frontend

# Backend
BACKEND_CORS_ORIGINS=["http://localhost", "http://localhost:4200", "http://localhost:3000", "http://localhost:8080", "https://localhost", "https://localhost:4200", "https://localhost:3000", "https://localhost:8080", "http://dev.codejavu.com", "https://stag.codejavu.com", "https://codejavu.com", "http://local.dockertoolbox.tiangolo.com", "http://localhost.tiangolo.com"]
PROJECT_NAME=codejavu
SECRET_KEY=9b6175ede02c1376fc16549b925848d3e295873d722caeba78a04d6d7a4fa031
[email protected]
FIRST_SUPERUSER_PASSWORD=password
SMTP_TLS=True
SMTP_PORT=587
SMTP_HOST=
SMTP_USER=
SMTP_PASSWORD=
[email protected]

USERS_OPEN_REGISTRATION=True

SENTRY_DSN=

# Flower
FLOWER_BASIC_AUTH=admin:password

# Postgres
POSTGRES_SERVER=localhost
POSTGRES_USER=postgres
POSTGRES_PASSWORD=password
POSTGRES_DB=app

# PgAdmin
PGADMIN_LISTEN_PORT=5050
[email protected]
PGADMIN_DEFAULT_PASSWORD=password

#TESTS
TEST_MODE=False

#QUERY PROFILE
PROFILE_QUERY_MODE=False

SERVER_NAME=codejavu
SERVER_HOST=http://localhost
Loading