diff --git a/.circleci/config.yml b/.circleci/config.yml index 794f6c7..8257e3e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -8,18 +8,25 @@ jobs: steps: - checkout - run: - name: Восстановление зависимостей + name: Восстановление зависимостей (Individual Task 1) command: dotnet restore "Individual Task 1/Individual Task 1.fsproj" - run: - name: Сборка проекта + name: Сборка проекта (Individual Task 1) command: dotnet build "Individual Task 1/Individual Task 1.fsproj" -c Release + - run: + name: Восстановление зависимостей (lab 5) + command: dotnet restore "lab 5/lab 5.fsproj" + - run: + name: Сборка проекта (lab 5) + command: dotnet build "lab 5/lab 5.fsproj" -c Release - persist_to_workspace: root: . paths: - Individual Task 1 + - lab 5 - .git - test: + test_it1: docker: - image: mcr.microsoft.com/dotnet/sdk:8.0 @@ -27,9 +34,20 @@ jobs: - attach_workspace: at: . - run: - name: Запуск на тестовых данных + name: Запуск на тестовых данных (Individual Task 1) command: cd "Individual Task 1" && dotnet run + test_lab5: + docker: + - image: mcr.microsoft.com/dotnet/sdk:8.0 + + steps: + - attach_workspace: + at: . + - run: + name: Запуск проекта (lab 5) + command: cd "lab 5" && dotnet run + docker_build: machine: image: ubuntu-2204:current @@ -38,16 +56,21 @@ jobs: - attach_workspace: at: . - run: - name: Сборка Docker образа - command: docker build -t euler-105:${CIRCLE_SHA1} -f "Individual Task 1/Dockerfile" "Individual Task 1" + name: Сборка Docker образов + command: docker compose build - run: - name: Запуск контейнера + name: Запуск контейнера (Individual Task 1) command: | - docker run --name euler-test euler-105:${CIRCLE_SHA1} - docker logs euler-test + docker compose up -d euler-105 + docker compose logs euler-105 - run: - name: Очистка контейнера - command: docker rm euler-test + name: Запуск контейнера (lab 5) + command: | + docker compose up -d lab5 + docker compose logs lab5 + - run: + name: Очистка контейнеров + command: docker compose down when: always workflows: @@ -55,9 +78,13 @@ workflows: build_test_deploy: jobs: - build - - test: + - test_it1: + requires: + - build + - test_lab5: requires: - build - docker_build: requires: - - test \ No newline at end of file + - test_it1 + - test_lab5 \ No newline at end of file diff --git a/Makefile b/Makefile index 547299c..d9eed8a 100644 --- a/Makefile +++ b/Makefile @@ -1,12 +1,18 @@ run: dotnet run --project "Individual Task 1/Individual Task 1.fsproj" +run-lab5: + dotnet run --project "lab 5/lab 5.fsproj" + help: @echo "Доступные команды:" @echo " make run - Запустить проект 'Individual Task 1'" + @echo " make run-lab5 - Запустить проект 'lab 5'" @echo " make help - Показать это сообщение" - @echo " make docker-build - Собрать Docker образ" - @echo " make docker-run - Запустить проект в Docker" + @echo " make docker-build - Собрать Docker образы всех проектов" + @echo " make docker-run - Запустить все проекты в Docker" + @echo " make lab5-docker-build - Собрать Docker образ для lab 5" + @echo " make lab5-docker-run - Запустить lab 5 в Docker" @echo " make ci-local - Запустить CircleCI локально" clean: @@ -18,6 +24,12 @@ docker-build: docker-run: docker compose up +lab5-docker-build: + docker compose build lab5 + +lab5-docker-run: + docker compose up lab5 + ci-local: circleci config validate circleci local execute diff --git a/README.md b/README.md index 5be5993..3bd11e7 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ | Проект | Описание | Документация | |--------|----------|--------------| | [Individual Task 1](Individual%20Task%201/README.md) | Решение задачи 105 из Project Euler на F# | [README](Individual%20Task%201/README.md) | +| [lab 5](lab%205/README.md) | Лабораторная работа 5 по функциональному программированию | [README](lab%205/README.md) | ## Инструменты разработки @@ -42,10 +43,19 @@ cd neko-fi ```bash make help +# Запуск Individual Task 1 make run +# Запуск lab 5 +make run-lab5 + +# Запуск в Docker make docker-build make docker-run + +# Запуск только lab 5 в Docker +make lab5-docker-build +make lab5-docker-run ``` ## CI/CD diff --git a/compose.yaml b/compose.yaml index 08f94ec..a184894 100644 --- a/compose.yaml +++ b/compose.yaml @@ -8,4 +8,13 @@ services: volumes: - ./Individual Task 1:/app stdin_open: true + tty: true + + lab5: + build: + context: ./lab 5 + dockerfile: Dockerfile + volumes: + - ./lab 5:/app + stdin_open: true tty: true \ No newline at end of file diff --git a/lab 5/Dockerfile b/lab 5/Dockerfile new file mode 100644 index 0000000..c04c4ad --- /dev/null +++ b/lab 5/Dockerfile @@ -0,0 +1,10 @@ +FROM mcr.microsoft.com/dotnet/sdk:8.0 + +WORKDIR /app + +COPY . . + +RUN dotnet restore +RUN dotnet build -c Release + +CMD ["dotnet", "run", "--no-build", "--configuration", "Release"] \ No newline at end of file diff --git a/lab 5/Program.fs b/lab 5/Program.fs new file mode 100644 index 0000000..d6818ab --- /dev/null +++ b/lab 5/Program.fs @@ -0,0 +1,2 @@ +// For more information see https://aka.ms/fsharp-console-apps +printfn "Hello from F#" diff --git a/lab 5/README.md b/lab 5/README.md new file mode 100644 index 0000000..d82f645 --- /dev/null +++ b/lab 5/README.md @@ -0,0 +1,29 @@ +# Лабораторная работа 5 + +## Описание + +Этот проект содержит решение задач пятой лабораторной работы по функциональному программированию на F#. + +## Цели проекта + + +## Запуск проекта + +### Локально + +```bash +cd "lab 5" +dotnet run +``` + +### Через Docker + +```bash +make lab5-docker-build +make lab5-docker-run +``` + +## Требования + +- .NET 8.0 SDK или выше +- Docker (optional) diff --git a/lab 5/lab 5.fsproj b/lab 5/lab 5.fsproj new file mode 100644 index 0000000..07dd8bb --- /dev/null +++ b/lab 5/lab 5.fsproj @@ -0,0 +1,13 @@ + + + + Exe + net7.0 + lab_5 + + + + + + +