AppVeyorで達成しようとしている動作は次のとおりです
- コードをビルドします (AssemblyInfo に をスタンプします
1.2.3.{build}
) 。 - コードをテストする
- テストに合格した場合は、nuget パッケージを作成します
- パッケージが正常に作成された場合は、ベータ パッケージを公開します (
1.2.3-beta-{build}
) - また、アーティファクトでパッケージを使用できるようにします。
nuget パッケージを公開する場合は、プレリリースとして公開するのが理想的です。NuGet では、これはパッケージ バージョンの末尾にアルファ文字を追加することによって行われます。また、既存のパッケージを上書きすることも悪い習慣と見なされます (実際、多くの nuget 実装ではこれが許可されていません)。
AppVeyor は、github からソフトウェアをビルドしてテストするのに優れていますが、nuget パッケージのバージョンを制御することはできないようです。
与えられた: 1.2.3 の次のセマンティック バージョンを含むパッケージ AppVeyor {version} 変数が と同等である1.2.3.{build}
と予想します nuget パッケージのバージョンが と同等であると予想します1.2.3-beta-{build}
最初に試したのは、{version}
ボックス内で変数を使用することでした。どうやらこれは許可されていません。AppVeyor は、{branch}
と{build}
の一部としてのみ変数置換を行うようです{version}
。つまり、セマンティック バージョン用に別の変数を維持する必要があります。
私が遭遇した次の課題は、UI から nuget パッケージのバージョンを設定する方法がないことです。AppVeyor のビルド バージョンと同じになるようにデフォルトを設定します。
テストの実行後、Powershell を使用してパッケージを作成してみることにしました。これは機能しますが、Nuget Publish ステップはパッケージが作成される前に実行する必要があり、実行順序を制御する方法がないようです。
私は間違った方向に進んでいると思います。概念のリセットが必要です。
現在の(間違った)状態の appveyor.yml は次のとおりです。
version: 0.1.0.{build}
configuration: Release
assembly_info:
patch: true
file: '**\AssemblyInfo.*'
assembly_version: '{version}'
assembly_file_version: '{version}'
assembly_informational_version: '{version}'
environment:
packageVersion: 0.1.0
nuget:
account_feed: true
project_feed: true
disable_publish_on_pr: true
before_build:
- ps: nuget restore
build:
verbosity: minimal
artifacts:
- path: '*.nupkg'
name: nuget package
deploy:
- provider: NuGet
api_key:
secure: blahblahblah
artifact: '*.nupkg'
on:
branch: master
on_success:
- ps: >-
$releaseVersion= $env:packageVersion
$buildNumber = $env:APPVEYOR_BUILD_NUMBER
$betaVersion= "$releaseVersion-beta-$buildNumber"
nuget pack Odin.nuspec -version $betaVersion
Get-ChildItem .\*.nupkg | % { Push-AppveyorArtifact $_.FullName -FileName $_.Name }
これを修正するにはどうすればよいですか? 希望する動作を取得できますか?