diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3edcb039eab7..110b1c582678 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,7 +1,7 @@ name: Release on: push: - branches: [master, main, adaptor-dlc] + branches: [master, main, windows-packaging] tags: ["*"] env: @@ -58,15 +58,15 @@ jobs: pkg-version: ${{steps.previoustag.outputs.tag}} MACOS_CERTIFICATE_PWD: ${{ secrets.CERTIFICATES_P12_PASSWORD }} MAC_NOTARIZATION_PW: ${{secrets.MAC_NOTARIZATION_PW}} - # Steps to build a fully signed and notarized krystal bull dmg + # Steps to build a fully signed and notarized bitcoin-s dmg # 1. Unlock the OS x keychain so we don't have to input passwords via GUI prompts - # 2. Build krystalbull.app that is recursively signed with jpackage --mac-sign - # 3. Build an unsigned dmg that contains krystalbull.app inside of it (no idea why --mac-sign doesn't work with --type dmg) + # 2. Build bitcoin-s.app that is recursively signed with jpackage --mac-sign + # 3. Build an unsigned dmg that contains bitcoin-s.app inside of it (no idea why --mac-sign doesn't work with --type dmg) # 4. Sign the dmg with codesign (jpackage dmg signing is broken for some reason) # 5. Submit the dmg to apple's notarization service so can get it whitelisted for installation (see: https://developer.apple.com/documentation/security/notarizing_macos_software_before_distribution) # 6. Sleep until apple notorization is done # 7. Retrieve the signature and staple it to the dmg to so network requests do not need to be made to open the dmg - # 8. Check all signatures on krystalbull.app (see: https://developer.apple.com/documentation/security/notarizing_macos_software_before_distribution/resolving_common_notarization_issues#3087735) + # 8. Check all signatures on bitcoin-s.app (see: https://developer.apple.com/documentation/security/notarizing_macos_software_before_distribution/resolving_common_notarization_issues#3087735) # 9. Check all dmg signatures # 10. Display information about signed dmg run: | @@ -116,7 +116,7 @@ jobs: - name: Setup Scala uses: olafurpg/setup-scala@v10 with: - java-version: openjdk@1.16.0-1 + java-version: openjdk@1.15.0-2 - name: 'Get Previous tag' id: previoustag uses: "WyriHaximus/github-action-get-previous-tag@v1" @@ -139,4 +139,30 @@ jobs: with: name: "bitcoin-s-deb-${{steps.previoustag.outputs.tag}}-${{github.sha}}" path: "${{ env.pkg-name }}_${{ steps.previoustag.outputs.tag }}-1_amd64.deb" + windows: + runs-on: [windows-latest] + steps: + - name: Checkout repo + uses: actions/checkout@v2 + with: + fetch-depth: 0 + - name: Setup Scala + uses: olafurpg/setup-scala@v10 + with: + java-version: adopt@1.16.0-1 + - name: 'Get Previous tag' + id: previoustag + uses: "WyriHaximus/github-action-get-previous-tag@v1" + with: + fallback: 1.0.0 # Optional fallback tag to use when no tag can be found + - name: Build msi + shell: bash + run: sbt bundle/windows:packageBin + - name: View artifacts + run: ls -R . + - name: Upload installer + uses: actions/upload-artifact@v1 + with: + name: bitcoin-s-msi-${{steps.previoustag.outputs.tag}}-${{github.sha}} + path: "D:\\a\\bitcoin-s\\bitcoin-s\\app\\bundle\\target\\windows\\bitcoin-s-bundle.msi" diff --git a/.jvmopts b/.jvmopts deleted file mode 100644 index 1b3bd90ff93d..000000000000 --- a/.jvmopts +++ /dev/null @@ -1 +0,0 @@ --Xmx4g diff --git a/app/bundle/bundle.sbt b/app/bundle/bundle.sbt index 82ea31896482..b3aba2a17a59 100644 --- a/app/bundle/bundle.sbt +++ b/app/bundle/bundle.sbt @@ -1,5 +1,10 @@ +import com.typesafe.sbt.packager.windows._ +import com.typesafe.sbt.SbtNativePackager.Windows + name := "bitcoin-s-bundle" +enablePlugins(WindowsPlugin) + mainClass := Some("org.bitcoins.bundle.gui.BundleGUI") publish / skip := true @@ -11,8 +16,34 @@ assembly / mainClass := Some("org.bitcoins.bundle.gui.BundleGUI") assembly / assemblyJarName := s"${name.value}.jar" +//need compatability with windows versioning scheme which is +//w.x.y.z +Windows / version := previousStableVersion.value.get + assembly / assemblyMergeStrategy := { case PathList("META-INF", _ @_*) => MergeStrategy.discard case PathList("reference.conf", _ @_*) => MergeStrategy.concat case _ => MergeStrategy.first } + +Compile / doc := (target.value / "none") +// general package information (can be scoped to Windows) +maintainer := "Chris Stewart " +// Will say "Welcome to the Setup Wizard" +packageSummary := "Bitcoin-S" +// Will be used for drop down menu in setup wizard +packageDescription := "Bitcoin-S" + +// wix build information +wixProductId := java.util.UUID.randomUUID().toString +wixProductUpgradeId := java.util.UUID.randomUUID().toString + +// Adding the wanted wixFeature: +wixFeatures += WindowsFeature( + id = "shortcuts", + title = "Shortcuts in start menu", + desc = "Add shortcuts for execution and uninstall in start menu", + components = Seq( + AddShortCuts(Seq("bin/bitcoin-s-bundle.bat")) + ) +) diff --git a/app/bundle/src/main/resources/application.conf b/app/bundle/src/main/resources/reference.conf similarity index 100% rename from app/bundle/src/main/resources/application.conf rename to app/bundle/src/main/resources/reference.conf diff --git a/app/bundle/src/main/scala/org/bitcoins/bundle/gui/BundleGUI.scala b/app/bundle/src/main/scala/org/bitcoins/bundle/gui/BundleGUI.scala index 62354dfa0755..41a7a88b616b 100644 --- a/app/bundle/src/main/scala/org/bitcoins/bundle/gui/BundleGUI.scala +++ b/app/bundle/src/main/scala/org/bitcoins/bundle/gui/BundleGUI.scala @@ -15,6 +15,7 @@ import scalafx.scene.control._ import scalafx.scene.layout.VBox import java.nio.file.{Path, Paths} +import scala.util.Properties object BundleGUI extends WalletGUI with JFXApp { @@ -43,6 +44,10 @@ object BundleGUI extends WalletGUI with JFXApp { val usedDir = DatadirUtil.getFinalDatadir(datadir, baseConfig, None) System.setProperty("bitcoins.log.location", usedDir.toAbsolutePath.toString) + + if (Properties.isWin) { + System.setProperty("HOME", datadir.getParent.toAbsolutePath.toString) + } } implicit lazy val system: ActorSystem = ActorSystem( @@ -84,6 +89,6 @@ object BundleGUI extends WalletGUI with JFXApp { override def stopApp(): Unit = { super.stopApp() - sys.exit() +// sys.exit() } } diff --git a/app/server-routes/src/main/scala/org/bitcoins/server/routes/BitcoinSRunner.scala b/app/server-routes/src/main/scala/org/bitcoins/server/routes/BitcoinSRunner.scala index 91bea8249842..18b81da26af0 100644 --- a/app/server-routes/src/main/scala/org/bitcoins/server/routes/BitcoinSRunner.scala +++ b/app/server-routes/src/main/scala/org/bitcoins/server/routes/BitcoinSRunner.scala @@ -95,6 +95,10 @@ trait BitcoinSRunner extends StartStopAsync[Unit] with Logging { val usedDir: Path = DatadirUtil.getFinalDatadir(datadir, baseConfig, customFinalDirOpt) + if (Properties.isWin) { + System.setProperty("HOME", datadir.getParent.toAbsolutePath.toString) + } + //We need to set the system property before any logger instances //are in instantiated. If we don't do this, we will not log to //the correct location diff --git a/inThisBuild.sbt b/inThisBuild.sbt index db0f68c07fdc..5875fc637c94 100644 --- a/inThisBuild.sbt +++ b/inThisBuild.sbt @@ -23,3 +23,7 @@ Global / excludeLintKeys ++= Set( //see: https://github.com/dwijnand/sbt-dynver#portable-version-strings //https://github.com/bitcoin-s/bitcoin-s/issues/2672 ThisBuild / dynverSeparator := "-" + +//don't require the leading 'v' on dynver versioning +//as that doesn't work with windows or mac versioning +ThisBuild / dynverVTagPrefix := false diff --git a/project/CommonSettings.scala b/project/CommonSettings.scala index 27c9476c1ffe..1b853e9a6429 100644 --- a/project/CommonSettings.scala +++ b/project/CommonSettings.scala @@ -1,22 +1,16 @@ // these two imports are needed for sbt syntax to work -import com.typesafe.sbt.SbtNativePackager.Docker +import com.typesafe.sbt.SbtNativePackager.{Docker, Windows} import com.typesafe.sbt.SbtNativePackager.autoImport.packageName import java.nio.file.Paths -import com.typesafe.sbt.packager.Keys.{ - daemonUser, - daemonUserUid, - dockerAlias, - dockerAliases, - dockerRepository, - dockerUpdateLatest, - maintainer -} +import com.typesafe.sbt.packager.Keys.{daemonUser, daemonUserUid, dockerAlias, dockerAliases, dockerRepository, dockerUpdateLatest, maintainer} import com.typesafe.sbt.packager.docker.DockerPlugin.autoImport.dockerBaseImage import sbt._ import sbt.Keys._ import sbtprotoc.ProtocPlugin.autoImport.PB import sbtassembly.AssemblyKeys._ +import sbtdynver.DynVerPlugin.autoImport.previousStableVersion + import scala.util.Properties object CommonSettings {