这是indexloc提供的服务,不要输入任何密码
Skip to content

regex #2

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

Merged
merged 1 commit into from
Oct 15, 2024
Merged
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
9 changes: 9 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
root = true

[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* text=auto eol=lf
76 changes: 23 additions & 53 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -1,16 +1,20 @@
name: CI

name: main
on:
workflow_dispatch:

workflow_dispatch:
inputs:
tag:
type: string
description: tag to checkout, must be semver, e.g. 5.2.2, actual list can be found here https://github.com/dotnet/SqlClient/tags
required: true
default: 5.2.2
jobs:
build:
main:
runs-on: windows-latest

steps:
- uses: actions/checkout@v4
with:
repository: 'dotnet/SqlClient'
repository: dotnet/SqlClient
ref: v${{ github.event.inputs.tag }}
- uses: microsoft/setup-msbuild@v1.0.2
- uses: nuget/setup-nuget@v1
- run: choco install dotnet4.6.1
Expand All @@ -19,53 +23,19 @@ jobs:
- name: workaround netcore
shell: powershell
run: |
$path = 'src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParser.cs'
$content = Get-Content $path -Raw
$content = $content.Replace(
'SendPreLoginHandshake(instanceName, encrypt, integratedSecurity, serverCertificateFilename);',
'// SendPreLoginHandshake(instanceName, encrypt, integratedSecurity, serverCertificateFilename);'
).Replace(
'PreLoginHandshakeStatus status = ConsumePreLoginHandshake(
encrypt,
trustServerCert,
integratedSecurity,
out marsCapable,
out _connHandler._fedAuthRequired,
isTlsFirst,
serverCertificateFilename);',
'PreLoginHandshakeStatus status = PreLoginHandshakeStatus.Successful;'
)
$content | Set-Content -Path $path
$path = 'src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParser.cs'
$content = Get-Content $path -Raw
$content = [regex]::Replace($content, 'SendPreLoginHandshake\([\s\S]+?\);', '// SendPreLoginHandshake(instanceName, encrypt, integratedSecurity, serverCertificateFilename);')
$content = [regex]::Replace($content, 'PreLoginHandshakeStatus status\s*=\s*ConsumePreLoginHandshake\s*\([\s\S]+?\);', 'PreLoginHandshakeStatus status = PreLoginHandshakeStatus.Successful;')
$content | Set-Content -Path $path
- name: workaround netfx
shell: powershell
run: |
$path = 'src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/TdsParser.cs'
$content = Get-Content $path -Raw
$content = $content.Replace(
'SendPreLoginHandshake(
instanceName,
encrypt,
integratedSecurity,
serverCertificateFilename);',
'// SendPreLoginHandshake(instanceName, encrypt, integratedSecurity, serverCertificateFilename);'
).Replace(
'PreLoginHandshakeStatus status = ConsumePreLoginHandshake(
authType,
encrypt,
trustServerCert,
integratedSecurity,
out marsCapable,
out _connHandler._fedAuthRequired,
isTlsFirst,
serverCertificateFilename);',
'PreLoginHandshakeStatus status = PreLoginHandshakeStatus.Successful;'
).Replace(
'out marsCapable,
out _connHandler._fedAuthRequired,',
'out var marsCapableStub,
out var _connHandler_fedAuthRequiredStub,'
)
$content | Set-Content -Path $path
$path = 'src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/TdsParser.cs'
$content = Get-Content $path -Raw
$content = [regex]::Replace($content, 'SendPreLoginHandshake\([\s\S]+?\);', '// SendPreLoginHandshake(instanceName, encrypt, integratedSecurity, serverCertificateFilename);')
$content = [regex]::Replace($content, 'PreLoginHandshakeStatus status\s*=\s*ConsumePreLoginHandshake\s*\([\s\S]+?\);', 'PreLoginHandshakeStatus status = PreLoginHandshakeStatus.Successful;')
$content | Set-Content -Path $path
- name: rename
shell: powershell
run: |
Expand All @@ -79,5 +49,5 @@ jobs:
$spec.package.metadata.releaseNotes = 'https://github.com/rabotaua/Rabota.SqlClient'
$spec.package.metadata.copyright = 'robota.ua'
$spec.Save($file.FullName)
- run: msbuild /t:BuildAllConfigurations /p:Configuration=Release /p:NugetPackageVersion=4.0.${{ github.run_number }}
- run: dotnet nuget push packages/Rabota.Data.SqlClient.4.0.${{ github.run_number }}.nupkg --api-key ${{ secrets.NUGET_TOKEN }} --source https://api.nuget.org/v3/index.json
- run: msbuild /t:BuildAllConfigurations /p:Configuration=Release /p:NugetPackageVersion=${{ github.event.inputs.tag }}.${{ github.run_number }}
- run: dotnet nuget push packages/Rabota.Data.SqlClient.${{ github.event.inputs.tag }}.${{ github.run_number }}.nupkg --api-key ${{ secrets.NUGET_TOKEN }} --source https://api.nuget.org/v3/index.json
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.idea
node_modules
.vs
42 changes: 37 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,34 @@ dotnet pack
dotnet publish
```

## versioning

все это дело запускается вручную (не предпологается что мы каждый день обновляем это дело)

при запуске мы явно указываем версию которую хотим подхачить (дело в том что мы наверное не хотим прям мастер каждый раз забирать, бо можем утянуть какие то не готовые кандидат релизы)

публикуемая версия будет иметь такой же номер плюс номер сборки в github

так например, если собираем для либы 5.2.2 то наш пакет будет иметь версию 5.2.2.42, где 42 это github build number

## local testing

за для локальной проверки, делаем следующее

```bash
git clone https://github.com/dotnet/SqlClient
```

далее открываем повершел и забираем куски кода из workflow и прогоняем их убеждаясь что оно находит и комментит интересующие нас куски кода (git status будет показывать изменения)

```ps1
$path = 'path/to/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParser.cs'
$content = Get-Content $path -Raw
$content = [regex]::Replace($content, 'SendPreLoginHandshake\([\s\S]+?\);', '// SendPreLoginHandshake(instanceName, encrypt, integratedSecurity, serverCertificateFilename);')
# ...
$content | Set-Content -Path $path
```

## Исторический контекст

Где то до ковида, когда делали самые первые шаги в докеры, куберы, сервисы и т.п. буквально сразу же обламались - технически не возможно ходить из сервиса бегущего в свежих линуксах в старую базу
Expand All @@ -40,6 +68,14 @@ dotnet publish

В целом оно работало, НО, есть один ньюанс - форк и его обновление - может оказаться проблемой, так у нас пролезли не совсем удачные комиты, называется сам не доглядель, из-за которых последующее обновление форка было бы порталом в ад с бесконечными конфликтами

## v1.1

Дальше вылезла необходимость сделать похожый хак только для виндовой сборки - именно начиная с того момента github action разросся и переехал на виндовую машинку и потому оно крепко завязано на это дело

## v1.2

С очередным изменением в исходниках поменялось форматирование, от чего поломались скрипты комментирующие код

## v2

В этом репо все устроено другим образом - мы отказываемся от форка как такового, т.к. он нам по сути то и не нужен
Expand All @@ -48,8 +84,4 @@ dotnet publish

И под шумок, в самом конце, публикацю пакета в nuget.org, дабы не нужно было этого делать руками

Тем самым раз и на всегда закрывая вопрос с форками и их апдейтами

### TODOs:
1. замінити exact replace -> regex
2. синхронізувати проставляння версії nuget-а з версією клонованого оригінального репозиторія
Тем самым раз и на всегда закрывая вопрос с форками и их апдейтами, а так же, под шумок, пользуем регулярки, дабы чуть легче переживать изменения форматирования