Skip to content

Commit 09f94b4

Browse files
committed
Use sbt-native-packager instead of sbt-pack
1 parent 4828244 commit 09f94b4

File tree

6 files changed

+193
-122
lines changed

6 files changed

+193
-122
lines changed

.github/workflows/build-msi.yml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
2+
name: Build the MSI Package
3+
4+
on:
5+
pull_request:
6+
7+
jobs:
8+
build:
9+
runs-on: windows-latest
10+
env:
11+
RELEASEBUILD: yes
12+
steps:
13+
- name: Checkout repository
14+
uses: actions/checkout@v3
15+
16+
- uses: actions/setup-java@v3
17+
with:
18+
distribution: 'adopt'
19+
java-version: '21'
20+
cache: 'sbt'
21+
- name: Build MSI package
22+
run: |
23+
sbt 'dist-win-x86_64/Windows/packageBin'
24+
- name: Upload MSI Artifact
25+
uses: actions/upload-artifact@v4
26+
with:
27+
name: scala.msi
28+
path: ./dist/win-x86_64/target/windows/scala.msi

pkgs/msi/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
error CNDL0108 : The Product/@Version attribute's value, '3.5.1-RC1', is not a valid version. Legal version values should look like 'x.x.x.x' where x is an integer from 0 to 65534

project/Build.scala

Lines changed: 44 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,31 @@
11
import java.io.File
22
import java.nio.file._
3-
43
import Process._
54
import Modes._
65
import ScaladocGeneration._
76
import com.jsuereth.sbtpgp.PgpKeys
8-
import sbt.Keys._
9-
import sbt._
7+
import sbt.Keys.*
8+
import sbt.*
109
import complete.DefaultParsers._
1110
import pl.project13.scala.sbt.JmhPlugin
1211
import pl.project13.scala.sbt.JmhPlugin.JmhKeys.Jmh
12+
import com.typesafe.sbt.packager.Keys._
13+
import com.typesafe.sbt.packager.MappingsHelper.directory
14+
import com.typesafe.sbt.packager.universal.UniversalPlugin
15+
import com.typesafe.sbt.packager.universal.UniversalPlugin.autoImport.Universal
16+
import com.typesafe.sbt.packager.windows.WindowsPlugin
17+
import com.typesafe.sbt.packager.windows.WindowsPlugin.autoImport.Windows
1318
import sbt.Package.ManifestAttributes
1419
import sbt.PublishBinPlugin.autoImport._
1520
import dotty.tools.sbtplugin.RepublishPlugin
1621
import dotty.tools.sbtplugin.RepublishPlugin.autoImport._
1722
import sbt.plugins.SbtPlugin
1823
import sbt.ScriptedPlugin.autoImport._
19-
import xerial.sbt.pack.PackPlugin
20-
import xerial.sbt.pack.PackPlugin.autoImport._
2124
import xerial.sbt.Sonatype.autoImport._
2225
import com.typesafe.tools.mima.plugin.MimaPlugin.autoImport._
2326
import org.scalajs.sbtplugin.ScalaJSPlugin
2427
import org.scalajs.sbtplugin.ScalaJSPlugin.autoImport._
28+
2529
import sbtbuildinfo.BuildInfoPlugin
2630
import sbtbuildinfo.BuildInfoPlugin.autoImport._
2731
import sbttastymima.TastyMiMaPlugin
@@ -88,7 +92,7 @@ object Build {
8892

8993
val referenceVersion = "3.4.2-RC1"
9094

91-
val baseVersion = "3.5.1-RC1"
95+
val baseVersion = "3.5.1"
9296

9397
// LTS or Next
9498
val versionLine = "Next"
@@ -2124,25 +2128,27 @@ object Build {
21242128
)
21252129

21262130
lazy val commonDistSettings = Seq(
2127-
packMain := Map(),
21282131
publishArtifact := false,
2129-
packGenerateMakefile := false,
21302132
republishRepo := target.value / "republish",
2131-
packResourceDir += (republishRepo.value / "bin" -> "bin"),
2132-
packResourceDir += (republishRepo.value / "maven2" -> "maven2"),
2133-
packResourceDir += (republishRepo.value / "etc" -> "etc"),
2134-
republishCommandLibs +=
2135-
("scala" -> List("scala3-interfaces", "scala3-compiler", "scala3-library", "tasty-core")),
2136-
republishCommandLibs +=
2137-
("with_compiler" -> List("scala3-staging", "scala3-tasty-inspector", "^!scala3-interfaces", "^!scala3-compiler", "^!scala3-library", "^!tasty-core")),
2138-
republishCommandLibs +=
2139-
("scaladoc" -> List("scala3-interfaces", "scala3-compiler", "scala3-library", "tasty-core", "scala3-tasty-inspector", "scaladoc")),
2140-
Compile / pack := republishPack.value,
2133+
Universal / packageName := packageName.value,
2134+
// ========
2135+
Universal / stage := (Universal / stage).dependsOn(republish).value,
2136+
Universal / packageBin := (Universal / packageBin).dependsOn(republish).value,
2137+
Universal / packageZipTarball := (Universal / packageZipTarball).dependsOn(republish).value,
2138+
// ========
2139+
Universal / mappings ++= directory(republishRepo.value / "bin"),
2140+
Universal / mappings ++= directory(republishRepo.value / "maven2"),
2141+
Universal / mappings ++= directory(republishRepo.value / "etc"),
2142+
Universal / mappings += (republishRepo.value / "VERSION") -> "VERSION",
2143+
// ========
2144+
republishCommandLibs += ("scala" -> List("scala3-interfaces", "scala3-compiler", "scala3-library", "tasty-core")),
2145+
republishCommandLibs += ("with_compiler" -> List("scala3-staging", "scala3-tasty-inspector", "^!scala3-interfaces", "^!scala3-compiler", "^!scala3-library", "^!tasty-core")),
2146+
republishCommandLibs += ("scaladoc" -> List("scala3-interfaces", "scala3-compiler", "scala3-library", "tasty-core", "scala3-tasty-inspector", "scaladoc")),
21412147
)
21422148

21432149
lazy val dist = project.asDist(Bootstrapped)
2150+
.settings(packageName := "scala3-" + dottyVersion)
21442151
.settings(
2145-
packArchiveName := "scala3-" + dottyVersion,
21462152
republishBinDir := baseDirectory.value / "bin",
21472153
republishCoursier +=
21482154
("coursier.jar" -> s"https://github.com/coursier/coursier/releases/download/v$coursierJarVersion/coursier.jar"),
@@ -2151,51 +2157,63 @@ object Build {
21512157
)
21522158

21532159
lazy val `dist-mac-x86_64` = project.in(file("dist/mac-x86_64")).asDist(Bootstrapped)
2160+
.settings(packageName := (dist / packageName).value + "-x86_64-apple-darwin")
21542161
.settings(
21552162
republishBinDir := (dist / republishBinDir).value,
2156-
packArchiveName := (dist / packArchiveName).value + "-x86_64-apple-darwin",
21572163
republishBinOverrides += (dist / baseDirectory).value / "bin-native-overrides",
21582164
republishFetchCoursier := (dist / republishFetchCoursier).value,
21592165
republishLaunchers +=
21602166
("scala-cli" -> s"gz+https://github.com/VirtusLab/scala-cli/releases/download/v$scalaCliLauncherVersion/scala-cli-x86_64-apple-darwin.gz")
21612167
)
21622168

21632169
lazy val `dist-mac-aarch64` = project.in(file("dist/mac-aarch64")).asDist(Bootstrapped)
2170+
.settings(packageName := (dist / packageName).value + "-aarch64-apple-darwin")
21642171
.settings(
21652172
republishBinDir := (dist / republishBinDir).value,
2166-
packArchiveName := (dist / packArchiveName).value + "-aarch64-apple-darwin",
21672173
republishBinOverrides += (dist / baseDirectory).value / "bin-native-overrides",
21682174
republishFetchCoursier := (dist / republishFetchCoursier).value,
21692175
republishLaunchers +=
21702176
("scala-cli" -> s"gz+https://github.com/VirtusLab/scala-cli/releases/download/v$scalaCliLauncherVersion/scala-cli-aarch64-apple-darwin.gz")
21712177
)
21722178

21732179
lazy val `dist-win-x86_64` = project.in(file("dist/win-x86_64")).asDist(Bootstrapped)
2180+
.enablePlugins(WindowsPlugin) // TO GENERATE THE `.msi` installer
2181+
.settings(packageName := (dist / packageName).value + "-x86_64-pc-win32")
21742182
.settings(
21752183
republishBinDir := (dist / republishBinDir).value,
2176-
packArchiveName := (dist / packArchiveName).value + "-x86_64-pc-win32",
21772184
republishBinOverrides += (dist / baseDirectory).value / "bin-native-overrides",
21782185
republishFetchCoursier := (dist / republishFetchCoursier).value,
21792186
republishExtraProps += ("cli_version" -> scalaCliLauncherVersion),
2180-
mappings += (republishRepo.value / "EXTRA_PROPERTIES" -> "EXTRA_PROPERTIES"),
21812187
republishLaunchers +=
21822188
("scala-cli.exe" -> s"zip+https://github.com/VirtusLab/scala-cli/releases/download/v$scalaCliLauncherVersionWindows/scala-cli-x86_64-pc-win32.zip!/scala-cli.exe")
21832189
)
2190+
.settings(
2191+
Universal / mappings += (republishRepo.value / "EXTRA_PROPERTIES" -> "EXTRA_PROPERTIES"),
2192+
)
2193+
.settings(
2194+
Windows / name := "scala",
2195+
Windows / mappings := (Universal / mappings).value,
2196+
Windows / packageBin := (Windows / packageBin).dependsOn(republish).value,
2197+
Windows / wixFiles := (Windows / wixFiles).dependsOn(republish).value,
2198+
maintainer := "Hamza Remmal <[email protected]>",
2199+
wixProductId := "74ED19C3-74FE-4ABA-AF30-55A06B6322A9",
2200+
wixProductUpgradeId := "3E5A1A82-CA67-4353-94FE-5BDD400AF66B"
2201+
)
21842202

21852203
lazy val `dist-linux-x86_64` = project.in(file("dist/linux-x86_64")).asDist(Bootstrapped)
2204+
.settings(packageName := (dist / packageName).value + "-x86_64-pc-linux")
21862205
.settings(
21872206
republishBinDir := (dist / republishBinDir).value,
2188-
packArchiveName := (dist / packArchiveName).value + "-x86_64-pc-linux",
21892207
republishBinOverrides += (dist / baseDirectory).value / "bin-native-overrides",
21902208
republishFetchCoursier := (dist / republishFetchCoursier).value,
21912209
republishLaunchers +=
21922210
("scala-cli" -> s"gz+https://github.com/VirtusLab/scala-cli/releases/download/v$scalaCliLauncherVersion/scala-cli-x86_64-pc-linux.gz")
21932211
)
21942212

21952213
lazy val `dist-linux-aarch64` = project.in(file("dist/linux-aarch64")).asDist(Bootstrapped)
2214+
.settings(packageName := (dist / packageName).value + "-aarch64-pc-linux")
21962215
.settings(
21972216
republishBinDir := (dist / republishBinDir).value,
2198-
packArchiveName := (dist / packArchiveName).value + "-aarch64-pc-linux",
21992217
republishBinOverrides += (dist / baseDirectory).value / "bin-native-overrides",
22002218
republishFetchCoursier := (dist / republishFetchCoursier).value,
22012219
republishLaunchers +=
@@ -2333,7 +2351,7 @@ object Build {
23332351
settings(scala3PresentationCompilerBuildInfo)
23342352

23352353
def asDist(implicit mode: Mode): Project = project.
2336-
enablePlugins(PackPlugin, RepublishPlugin).
2354+
enablePlugins(UniversalPlugin, RepublishPlugin).
23372355
withCommonSettings.
23382356
settings(commonDistSettings).
23392357
dependsOn(
@@ -2429,7 +2447,6 @@ object ScaladocConfigs {
24292447
}
24302448

24312449
lazy val DefaultGenerationConfig = Def.task {
2432-
def distLocation = (dist / Compile / pack).value
24332450
DefaultGenerationSettings.value
24342451
}
24352452

project/DistributionPlugin.scala

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import com.typesafe.sbt.packager.Keys.stage
2+
import com.typesafe.sbt.packager.universal.UniversalPlugin
3+
import com.typesafe.sbt.packager.universal.UniversalPlugin.autoImport.Universal
4+
import sbt.*
5+
6+
/**
7+
* @author Hamza REMMAL (https://github.com/hamzaremmal/)
8+
*/
9+
object DistributionPlugin extends AutoPlugin {
10+
11+
override def trigger = allRequirements
12+
13+
override def requires =
14+
super.requires && UniversalPlugin // Require the Universal Plugin to
15+
16+
object autoImport {
17+
val `universal_project` = settingKey[Project]("???")
18+
val `linux-aarch64_project` = settingKey[Project]("???")
19+
val `linux-x86_64_project` = settingKey[Project]("???")
20+
val `mac-aarch64_project` = settingKey[Project]("???")
21+
val `win-x86_64_project` = settingKey[Project]("???")
22+
23+
24+
// ========================== TASKS TO GENERATE THE FOLDER PACKAGE ============================
25+
val `pack-universal` =
26+
taskKey[File]("Generate the package with the universal binaries (folder)")
27+
val `pack_linux-aarch64` =
28+
taskKey[File]("Generate the package with the linux-aarch64 binaries (folder)")
29+
val `pack_linux-x86_64` =
30+
taskKey[File]("Generate the package with the linux-x86_64 binaries (folder)")
31+
val `pack_mac-aarch64` =
32+
taskKey[File]("Generate the package with the mac-aarch64 binaries (folder)")
33+
val `pack_mac-x86_64` =
34+
taskKey[File]("Generate the package with the mac-x86_64 binaries (folder)")
35+
val `pack_win-x86_64` =
36+
taskKey[File]("Generate the package with the linux-x86_64 binaries (folder)")
37+
}
38+
39+
import autoImport.*
40+
41+
override def projectSettings = Def.settings(
42+
`pack-universal` := (`universal_project` / Universal./(stage)).value ,
43+
`pack_linux-aarch64` := ???,
44+
`pack_linux-x86_64` := ???,
45+
`pack_mac-aarch64` := ???,
46+
`pack_mac-x86_64` := ???,
47+
`pack_win-x86_64` := ???
48+
)
49+
50+
}

0 commit comments

Comments
 (0)