diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..7ef82aa --- /dev/null +++ b/.dockerignore @@ -0,0 +1,440 @@ +.git/ +## Please keep in sync with .dockerignore +## Use "npx gitignore-to-dockerignore" to generate .dockerignore from this .gitignore + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore + +# User-specific files +**/*.rsuser +**/*.suo +**/*.user +**/*.userosscache +**/*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +**/*.userprefs + +# Mono auto generated files +**/mono_crash.* + +# Build results +**/[Dd]ebug/ +**/[Dd]ebugPublic/ +**/[Rr]elease/ +**/[Rr]eleases/ +**/x64/ +**/x86/ +**/[Ww][Ii][Nn]32/ +**/[Aa][Rr][Mm]/ +**/[Aa][Rr][Mm]64/ +**/bld/ +**/[Bb]in/ +**/[Oo]bj/ +**/[Ll]og/ +**/[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +**/.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +**/Generated\ Files/ + +# MSTest test Results +**/[Tt]est[Rr]esult*/ +**/[Bb]uild[Ll]og.* + +# NUnit +**/*.VisualState.xml +**/TestResult.xml +**/nunit-*.xml + +# Build Results of an ATL Project +**/[Dd]ebugPS/ +**/[Rr]eleasePS/ +**/dlldata.c + +# Benchmark Results +**/BenchmarkDotNet.Artifacts/ + +# .NET Core +**/project.lock.json +**/project.fragment.lock.json +**/artifacts/ + +# ASP.NET Scaffolding +**/ScaffoldingReadMe.txt + +# StyleCop +**/StyleCopReport.xml + +# Files built by Visual Studio +**/*_i.c +**/*_p.c +**/*_h.h +**/*.ilk +**/*.meta +**/*.obj +**/*.iobj +**/*.pch +**/*.pdb +**/*.ipdb +**/*.pgc +**/*.pgd +**/*.rsp +# but not Directory.Build.rsp, as it configures directory-level build defaults +!**/Directory.Build.rsp +**/*.sbr +**/*.tlb +**/*.tli +**/*.tlh +**/*.tmp +**/*.tmp_proj +**/*_wpftmp.csproj +**/*.log +**/*.tlog +**/*.vspscc +**/*.vssscc +**/.builds +**/*.pidb +**/*.svclog +**/*.scc + +# Chutzpah Test files +**/_Chutzpah* + +# Visual C++ cache files +**/ipch/ +**/*.aps +**/*.ncb +**/*.opendb +**/*.opensdf +**/*.sdf +**/*.cachefile +**/*.VC.db +**/*.VC.VC.opendb + +# Visual Studio profiler +**/*.psess +**/*.vsp +**/*.vspx +**/*.sap + +# Visual Studio Trace Files +**/*.e2e + +# TFS 2012 Local Workspace +**/$tf/ + +# Guidance Automation Toolkit +**/*.gpState + +# ReSharper is a .NET coding add-in +**/_ReSharper*/ +**/*.[Rr]e[Ss]harper +**/*.DotSettings.user + +# TeamCity is a build add-in +**/_TeamCity* + +# DotCover is a Code Coverage Tool +**/*.dotCover + +# AxoCover is a Code Coverage Tool +**/.axoCover/* +!**/.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +**/coverage*.json +**/coverage*.xml +**/coverage*.info + +# Visual Studio code coverage results +**/*.coverage +**/*.coveragexml + +# NCrunch +**/_NCrunch_* +**/.*crunch*.local.xml +**/nCrunchTemp_* + +# MightyMoose +**/*.mm.* +**/AutoTest.Net/ + +# Web workbench (sass) +**/.sass-cache/ + +# Installshield output folder +**/[Ee]xpress/ + +# DocProject is a documentation generator add-in +**/DocProject/buildhelp/ +**/DocProject/Help/*.HxT +**/DocProject/Help/*.HxC +**/DocProject/Help/*.hhc +**/DocProject/Help/*.hhk +**/DocProject/Help/*.hhp +**/DocProject/Help/Html2 +**/DocProject/Help/html + +# Click-Once directory +**/publish/ + +# Publish Web Output +**/*.[Pp]ublish.xml +**/*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +**/*.pubxml +**/*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +**/PublishScripts/ + +# NuGet Packages +**/*.nupkg +# NuGet Symbol Packages +**/*.snupkg +# The packages folder can be ignored because of Package Restore +**/**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +**/*.nuget.props +**/*.nuget.targets + +# Microsoft Azure Build Output +**/csx/ +**/*.build.csdef + +# Microsoft Azure Emulator +**/ecf/ +**/rcf/ + +# Windows Store app package directories and files +**/AppPackages/ +**/BundleArtifacts/ +**/Package.StoreAssociation.xml +**/_pkginfo.txt +**/*.appx +**/*.appxbundle +**/*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +**/*.[Cc]ache +# but keep track of directories ending in .cache +!**/?*.[Cc]ache/ + +# Others +**/ClientBin/ +**/~$* +**/*~ +**/*.dbmdl +**/*.dbproj.schemaview +**/*.jfm +**/*.pfx +**/*.publishsettings +**/orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +**/Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +**/_UpgradeReport_Files/ +**/Backup*/ +**/UpgradeLog*.XML +**/UpgradeLog*.htm +**/ServiceFabricBackup/ +**/*.rptproj.bak + +# SQL Server files +**/*.mdf +**/*.ldf +**/*.ndf + +# Business Intelligence projects +**/*.rdl.data +**/*.bim.layout +**/*.bim_*.settings +**/*.rptproj.rsuser +**/*- [Bb]ackup.rdl +**/*- [Bb]ackup ([0-9]).rdl +**/*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +**/FakesAssemblies/ + +# GhostDoc plugin setting file +**/*.GhostDoc.xml + +# Node.js Tools for Visual Studio +**/.ntvs_analysis.dat +**/node_modules/ + +# Visual Studio 6 build log +**/*.plg + +# Visual Studio 6 workspace options file +**/*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +**/*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +**/*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +**/*.dsw +**/*.dsp + +# Visual Studio 6 technical files +**/*.ncb +**/*.aps + +# Visual Studio LightSwitch build output +**/**/*.HTMLClient/GeneratedArtifacts +**/**/*.DesktopClient/GeneratedArtifacts +**/**/*.DesktopClient/ModelManifest.xml +**/**/*.Server/GeneratedArtifacts +**/**/*.Server/ModelManifest.xml +**/_Pvt_Extensions + +# Paket dependency manager +**/.paket/paket.exe +**/paket-files/ + +# FAKE - F# Make +**/.fake/ + +# CodeRush personal settings +**/.cr/personal + +# Python Tools for Visual Studio (PTVS) +**/__pycache__/ +**/*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +**/*.tss + +# Telerik's JustMock configuration file +**/*.jmconfig + +# BizTalk build output +**/*.btp.cs +**/*.btm.cs +**/*.odx.cs +**/*.xsd.cs + +# OpenCover UI analysis results +**/OpenCover/ + +# Azure Stream Analytics local run output +**/ASALocalRun/ + +# MSBuild Binary and Structured Log +**/*.binlog + +# NVidia Nsight GPU debugger configuration file +**/*.nvuser + +# MFractors (Xamarin productivity tool) working folder +**/.mfractor/ + +# Local History for Visual Studio +**/.localhistory/ + +# Visual Studio History (VSHistory) files +**/.vshistory/ + +# BeatPulse healthcheck temp database +**/healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +**/MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +**/.ionide/ + +# Fody - auto-generated XML schema +**/FodyWeavers.xsd + +# VS Code files for those working on multiple tools +**/.vscode/* +!**/.vscode/settings.json +!**/.vscode/tasks.json +!**/.vscode/launch.json +!**/.vscode/extensions.json +**/*.code-workspace + +# Local History for Visual Studio Code +**/.history/ + +# Windows Installer files from build outputs +**/*.cab +**/*.msi +**/*.msix +**/*.msm +**/*.msp + +# JetBrains Rider +**/*.sln.iml + +################################################################################ +## Content of the Visual Studio .gitignore from GitHub goes above this line. ## +## https://github.com/github/gitignore/blob/main/VisualStudio.gitignore ## +################################################################################ + +## SQL Schema Compare rules + +# Do not ignore private keys +!**/*.pfx + +# TypeScript incremental build info +**/*.tsbuildinfo + +# ESLint +**/.eslintcache + +# Ignore .js and .js.map files that were generated by our TypeScript Modules +**/SQLSchemaCompare/app.js +**/SQLSchemaCompare/app.js.map +**/SQLSchemaCompare.UI/wwwroot/js/**/*.js +**/SQLSchemaCompare.UI/wwwroot/js/**/*.js.map +**/SQLSchemaCompare.UI/wwwroot/css/**/*.css + +# Installer folders +**/.publish +**/installer + +# Documentation files +**/SQLSchemaCompare.Core/TiCodeX.SQLSchemaCompare.Core.xml +**/SQLSchemaCompare.Services/TiCodeX.SQLSchemaCompare.Services.xml +**/SQLSchemaCompare.Infrastructure/TiCodeX.SQLSchemaCompare.Infrastructure.xml +**/SQLSchemaCompare.CLI/TiCodeX.SQLSchemaCompare.CLI.xml +**/SQLSchemaCompare.UI/TiCodeX.SQLSchemaCompare.UI.xml +**/SQLSchemaCompare.Test/TiCodeX.SQLSchemaCompare.Test.xml + diff --git a/.gitignore b/.gitignore index 59c6708..26d1a88 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +## Please keep in sync with .dockerignore +## Use "npx gitignore-to-dockerignore" to generate .dockerignore from this .gitignore + ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## diff --git a/SQLSchemaCompare.CLI/Dockerfile b/SQLSchemaCompare.CLI/Dockerfile new file mode 100644 index 0000000..289e7e9 --- /dev/null +++ b/SQLSchemaCompare.CLI/Dockerfile @@ -0,0 +1,51 @@ +FROM mcr.microsoft.com/dotnet/runtime:8.0-alpine AS base +WORKDIR /app + +# Install Timezone data +RUN apk add --update tzdata + +# Workaround Unhandled exception. System.NotSupportedException: Globalization Invariant Mode is not supported. +# https://github.com/dotnet/SqlClient/issues/220 +RUN apk add --update icu-libs +RUN apk add icu-data-full +ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false + +FROM mcr.microsoft.com/dotnet/sdk:8.0-alpine AS build + +WORKDIR /src + +# Copy solution-wide files +COPY .editorconfig .editorconfig +COPY global.json global.json +COPY Directory.Build.props Directory.Build.props +COPY SonarLint.xml SonarLint.xml + +# We only copy the csproj files first so the layer caching will work correctly +COPY ["SQLSchemaCompare.Core/SQLSchemaCompare.Core.csproj", "SQLSchemaCompare.Core/"] +COPY ["SQLSchemaCompare.Services/SQLSchemaCompare.Services.csproj", "SQLSchemaCompare.Services/"] +COPY ["SQLSchemaCompare.Infrastructure/SQLSchemaCompare.Infrastructure.csproj", "SQLSchemaCompare.Infrastructure/"] +COPY ["SQLSchemaCompare.CLI/SQLSchemaCompare.CLI.csproj", "SQLSchemaCompare.CLI/"] + +# restore the projects (this will be very fast with layer caching if the csproj files haven't changed) +RUN dotnet restore -r linux-musl-x64 SQLSchemaCompare.Core/SQLSchemaCompare.Core.csproj +RUN dotnet restore -r linux-musl-x64 SQLSchemaCompare.Services/SQLSchemaCompare.Services.csproj +RUN dotnet restore -r linux-musl-x64 SQLSchemaCompare.Infrastructure/SQLSchemaCompare.Infrastructure.csproj +RUN dotnet restore -r linux-musl-x64 SQLSchemaCompare.CLI/SQLSchemaCompare.CLI.csproj + +# Copy the rest of the code (we only copy the necessary files to make good use of layer caching) +COPY SQLSchemaCompare.Core/ SQLSchemaCompare.Core +COPY SQLSchemaCompare.Services/ SQLSchemaCompare.Services +COPY SQLSchemaCompare.Infrastructure/ SQLSchemaCompare.Infrastructure +COPY SQLSchemaCompare.CLI/ SQLSchemaCompare.CLI + +WORKDIR /src/SQLSchemaCompare.CLI + +RUN dotnet build --no-restore SQLSchemaCompare.CLI.csproj -c Release + +FROM build AS publish +RUN dotnet publish --no-restore --no-build SQLSchemaCompare.CLI.csproj -c Release -o /app/publish + +FROM base AS final +COPY --from=publish /app/publish . + +ENTRYPOINT ["/app/TiCodeX.SQLSchemaCompare.CLI"] diff --git a/SQLSchemaCompare.sln b/SQLSchemaCompare.sln index cd44e10..ebef9e8 100644 --- a/SQLSchemaCompare.sln +++ b/SQLSchemaCompare.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.1.32421.90 +# Visual Studio Version 18 +VisualStudioVersion = 18.0.11217.181 d18.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SQLSchemaCompare.UI", "SQLSchemaCompare.UI\SQLSchemaCompare.UI.csproj", "{E204594D-3E7E-4EBA-8441-87560A5C02C4}" EndProject @@ -10,6 +10,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SQLSchemaCompare.Test", "SQ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "00 - Solution Items", "00 - Solution Items", "{EB87FDBE-CC7F-4AD6-BD06-1425586DEEDD}" ProjectSection(SolutionItems) = preProject + .dockerignore = .dockerignore .editorconfig = .editorconfig .gitignore = .gitignore BaseEslintConfig.js = BaseEslintConfig.js diff --git a/pre-commit-hook.sh b/pre-commit-hook.sh index 7a98da8..dbe8f38 100644 --- a/pre-commit-hook.sh +++ b/pre-commit-hook.sh @@ -3,6 +3,7 @@ changedFiles=$(git diff --cached --name-only) for file in $changedFiles; do [ ! -f "$file" ] && continue; + [ -z "${file##".dockerignore"}" ] && continue; [ -z "${file##".github/"*}" ] && continue; [ -z "${file##"images/"*}" ] && continue; [ -z "${file##"SQLSchemaCompare.UI/wwwroot/lib/"*}" ] && continue;