Skip to content
Closed
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
1 change: 1 addition & 0 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
для разработки используйте следующие IDE

* Visual Studio 2017 и выше
* Visual Studio Code c расширениями C#, 1C-Syntax, OScript.Debug
* Rider 2017.8 и выше

для приемочного тестирования используйте
Expand Down
10 changes: 10 additions & 0 deletions .github/workflows/dotnet-core.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,19 @@ jobs:
- name: Test
run: dotnet test ${{env.TEST_PROJECT}} -c Release --runtime=${{matrix.RID}} -f ${{ matrix.target }} --logger="trx;LogFileName=${{matrix.RID}}.trx" --results-directory=testResults

# Публикация
- name: Publish
run: dotnet publish ${{env.MAIN_PROJECT}} -c Release -r ${{matrix.RID}} -f ${{ matrix.target }} --self-contained -o ../artifact/${{matrix.target}}/${{matrix.RID}}-with-runtime

# Заливка в артефакты
- name: Artifact
uses: actions/upload-artifact@v2
with:
name: oscript.web-${{matrix.RID}}.zip
path: ./artifact/${{matrix.target}}/${{matrix.RID}}
# Заливка в артефакты приложения с Runtime
- name: Artifact with Runtime
uses: actions/upload-artifact@v2
with:
name: oscript.web-${{matrix.RID}}.zip
path: ./artifact/${{matrix.target}}/${{matrix.RID}}-with-runtime
28 changes: 28 additions & 0 deletions debug-application/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Отладочное приложение для разработчика ядра OScript.Web

назначение данного приложения простое - необходимо отлаживать низкоуровневое поведение ASP.NET, в это случае мы используем функциональность `dotnet watch` - режим онлайн перезагрузки приложения `.NET` при изменении файлов

## Использование

> на данный момент использование подразумевает наличие у вас Visual Studio Code и Chocolatey и Windows
* установить `choco install dotnetcore-sdk`
* запустить Visual Studio Code
* запустить `debug.bat`

## Поведение

* `dotnet` следит за изменениями исходников в формате `OScript` в текущем каталоге, а в каталоге исходников `OScript.Web` только за изменениями в модуле `package-loader.os`
*

## Особенности использования Visual Studio Code

наиболее полно функциональность расскрывается с помощью трёх расширений `VSCode`

* `ms-dotnettools.csharp` - поддержка C#, ASP.NET, Razor и отладчика C#
* `evilbeaver.oscript-debug` - поддержка отладки OScript
* `1c-syntax.language-1c-bsl` - поддержка языка 1С и OScript

## Структура каталогов

* `./` - `content-root` - то есть корень контента приложения
* `wwwroot` - статический файлы - вообще конечно, удобней впереди ставить `nginx`, но мы будем ставить `Caddy` - https://caddyserver.com/ - в том числе и для https ;-)
5 changes: 5 additions & 0 deletions debug-application/appsettings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"BackgroundJobs":{
"StorageType":"Memory"
}
}
Empty file.
3 changes: 3 additions & 0 deletions debug-application/debug.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
@echo off
set curDir=%CD%
dotnet watch --project ..\src\OneScript\OneScriptWeb.csproj watch run --framework netcoreapp3.1 --ContentRoot %curDir%
Empty file added debug-application/debug.sh
Empty file.
32 changes: 32 additions & 0 deletions debug-application/main.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#Использовать "model"

Процедура ПриНачалеРаботыСистемы()

Сообщить("Старт отладочного приложения через DOTNET WATCH - То есть с перекомпиляцией при изменении");
Сообщить("Фактически - медленно но верно позволяет кодить как на ОднОскрипте, так и на C#");

ИспользоватьСтатическиеФайлы();
ИспользоватьСессии();
ИспользоватьМаршруты("ОпределениеМаршрутов");

ИспользоватьФоновыеЗадания();
НастроитьФоновыеЗадания();

КонецПроцедуры

Процедура ОпределениеМаршрутов(КоллекцияМаршрутов)

КоллекцияМаршрутов.Добавить("ГлавнаяСтраница", "{controller=home}/{action=index}");

КонецПроцедуры

Процедура НастроитьФоновыеЗадания()

Раписание = Новый РасписаниеФоновыхЗаданий();
Раписание.КаждуюМинуту();

РегламентныеЗадания.СоздатьПериодическоеЗаданиеПоРасписанию(
"СерверныеОповещения", "ОповеститьКлиентовОСтранном", Раписание
);

КонецПроцедуры
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
Процедура ОповеститьКлиентовОСтранном() Экспорт

Сообщить("Я работаю по расписанию - постоянно, пока не отключишь
|или могу выполниться принудительно
|кстати ;-)", СтатусСообщения.Информация);

Сообщить("Я как процедура должна быть экспортной - иначе сервис фоновых заданий меня не найдет
|вместе с этим мой модуль должен быть доступен статично - без слова Новый - за это отвечает Package Loader");

КонецПроцедуры
44 changes: 44 additions & 0 deletions debug-application/model/package-loader.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
Процедура ПриЗагрузкеБиблиотеки(Путь, СтандартнаяОбработка, Отказ)

СтандартнаяОбработка = Ложь;
ОбработатьСтруктуруКаталоговПоСоглашению(Путь, СтандартнаяОбработка, Отказ);

КонецПроцедуры

Процедура ОбработатьСтруктуруКаталоговПоСоглашению(Путь, СтандартнаяОбработка, Отказ)

КаталогКлассов = Новый Файл(ОбъединитьПути(Путь, "classes"));
КаталогМодулей = Новый Файл(ОбъединитьПути(Путь, "modules"));
КаталогФоновых = Новый Файл(ОбъединитьПути(Путь, "jobs"));

Если КаталогКлассов.Существует() Тогда
Файлы = НайтиФайлы(КаталогКлассов.ПолноеИмя, "*.os");
Для Каждого Файл Из Файлы Цикл
СтандартнаяОбработка = Ложь;
ДобавитьКласс(Файл.ПолноеИмя, Файл.ИмяБезРасширения);
Сообщить("Сработал загрузчик классов
|для модуля " + Файл.ИмяБезРасширения);
КонецЦикла;
КонецЕсли;

Если КаталогМодулей.Существует() Тогда
Файлы = НайтиФайлы(КаталогМодулей.ПолноеИмя, "*.os");
Для Каждого Файл Из Файлы Цикл
СтандартнаяОбработка = Ложь;
ДобавитьМодуль(Файл.ПолноеИмя, Файл.ИмяБезРасширения);
Сообщить("Сработал загрузчик модулей
|для модуля " + Файл.ИмяБезРасширения);
КонецЦикла;
КонецЕсли;

Если КаталогФоновых.Существует() Тогда
Файлы = НайтиФайлы(КаталогФоновых.ПолноеИмя, "*.os");
Для Каждого Файл Из Файлы Цикл
СтандартнаяОбработка = Ложь;
ДобавитьМодуль(Файл.ПолноеИмя, Файл.ИмяБезРасширения);
Сообщить("Сработал загрузчик модулей
|для модуля " + Файл.ИмяБезРасширения);
КонецЦикла;
КонецЕсли;

КонецПроцедуры
4 changes: 4 additions & 0 deletions src/OneScript/BackgroundJobs/BackgroundJobsExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ private static void AddBackgroundJobsOptions(IServiceCollection services, IConfi
var jobsSettings = config.GetSection("BackgroundJobs");
var options = new OscriptBackgroundJobsOptions();

hfGlobalConfig.UseLogProvider(
new Hangfire.Logging.LogProviders.ColouredConsoleLogProvider()
);

jobsSettings.Bind(options);

switch (options.StorageType)
Expand Down
5 changes: 5 additions & 0 deletions src/OneScript/OneScriptWeb.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -75,4 +75,9 @@
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<!-- extends watching group to include *.os files -->
<Watch Include="**\*.os" Exclude="oscript_modules\**\*" />
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Разве watch-перекомпиляция приводит к рестарту приложения? Если нет, то исходники 1скрипта не будут подхвачены приложением.

<Watch Include="..\..\debug-application\**\*.os" Exclude="oscript_modules\**\*" />
</ItemGroup>
</Project>