Skip to content

Commit 77948c4

Browse files
committed
Refer to actions by commit hash
Some organizations have a policy of always referring to GitHub actions by commit hash rather than tag, as tags can be moved without review. This explores what this would look like for `sbt-github-actions`. Of course the main downside would be that updating the hashes creates churn.
1 parent bec52c1 commit 77948c4

File tree

11 files changed

+135
-96
lines changed

11 files changed

+135
-96
lines changed

.github/workflows/ci.yml

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -34,28 +34,28 @@ jobs:
3434

3535
- name: Configure pagefile for Windows
3636
if: contains(runner.os, 'windows')
37-
uses: al-cheb/[email protected]
37+
uses: al-cheb/configure-pagefile-action@a3b6ebd6b634da88790d9c58d4b37a7f4a7b8708 # v1.4
3838
with:
3939
minimum-size: 2GB
4040
maximum-size: 8GB
4141
disk-root: 'C:'
4242

4343
- name: Checkout current branch (full)
44-
uses: actions/checkout@v5
44+
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
4545
with:
4646
fetch-depth: 0
4747

4848
- name: Setup Java (zulu@8)
4949
if: matrix.java == 'zulu@8'
50-
uses: actions/setup-java@v5
50+
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
5151
with:
5252
distribution: zulu
5353
java-version: 8
5454
cache: sbt
5555

5656
- name: Setup GraalVM (graal_graalvm@17)
5757
if: matrix.java == 'graal_graalvm@17'
58-
uses: graalvm/setup-graalvm@v1
58+
uses: graalvm/setup-graalvm@2a2412009026a83f51d179f92dc2b3fd4c8142df # v1.4.1
5959
with:
6060
java-version: 17
6161
distribution: graalvm
@@ -65,14 +65,14 @@ jobs:
6565

6666
- name: Setup Java (corretto@17)
6767
if: matrix.java == 'corretto@17'
68-
uses: actions/setup-java@v5
68+
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
6969
with:
7070
distribution: corretto
7171
java-version: 17
7272
cache: sbt
7373

7474
- name: Setup sbt
75-
uses: sbt/setup-sbt@v1
75+
uses: sbt/setup-sbt@3e125ece5c3e5248e18da9ed8d2cce3d335ec8dd # v1.1.14
7676

7777
- name: Check that workflows are up to date
7878
shell: bash
@@ -90,7 +90,7 @@ jobs:
9090
run: tar cf targets.tar target project/target
9191

9292
- name: Upload target directories
93-
uses: actions/upload-artifact@v4
93+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
9494
with:
9595
name: target-${{ matrix.os }}-${{ matrix.scala }}-${{ matrix.java }}
9696
path: targets.tar
@@ -112,28 +112,28 @@ jobs:
112112

113113
- name: Configure pagefile for Windows
114114
if: contains(runner.os, 'windows')
115-
uses: al-cheb/[email protected]
115+
uses: al-cheb/configure-pagefile-action@a3b6ebd6b634da88790d9c58d4b37a7f4a7b8708 # v1.4
116116
with:
117117
minimum-size: 2GB
118118
maximum-size: 8GB
119119
disk-root: 'C:'
120120

121121
- name: Checkout current branch (full)
122-
uses: actions/checkout@v5
122+
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
123123
with:
124124
fetch-depth: 0
125125

126126
- name: Setup Java (zulu@8)
127127
if: matrix.java == 'zulu@8'
128-
uses: actions/setup-java@v5
128+
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
129129
with:
130130
distribution: zulu
131131
java-version: 8
132132
cache: sbt
133133

134134
- name: Setup GraalVM (graal_graalvm@17)
135135
if: matrix.java == 'graal_graalvm@17'
136-
uses: graalvm/setup-graalvm@v1
136+
uses: graalvm/setup-graalvm@2a2412009026a83f51d179f92dc2b3fd4c8142df # v1.4.1
137137
with:
138138
java-version: 17
139139
distribution: graalvm
@@ -143,17 +143,17 @@ jobs:
143143

144144
- name: Setup Java (corretto@17)
145145
if: matrix.java == 'corretto@17'
146-
uses: actions/setup-java@v5
146+
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
147147
with:
148148
distribution: corretto
149149
java-version: 17
150150
cache: sbt
151151

152152
- name: Setup sbt
153-
uses: sbt/setup-sbt@v1
153+
uses: sbt/setup-sbt@3e125ece5c3e5248e18da9ed8d2cce3d335ec8dd # v1.1.14
154154

155155
- name: Download target directories (2.12.20)
156-
uses: actions/download-artifact@v5
156+
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
157157
with:
158158
name: target-${{ matrix.os }}-2.12.20-${{ matrix.java }}
159159

src/main/scala/sbtghactions/GenerativePlugin.scala

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -301,8 +301,8 @@ ${indent(rendered.mkString("\n"), 1)}"""
301301
import use.{ref, params}
302302

303303
val decl = ref match {
304-
case UseRef.Public(owner, repo, ref) =>
305-
s"uses: $owner/$repo@$ref"
304+
case UseRef.Public(owner, repo, rev, ref) =>
305+
s"uses: $owner/$repo@$rev # $ref"
306306

307307
case UseRef.Local(path) =>
308308
val cleaned = if (path.startsWith("./"))
@@ -640,7 +640,8 @@ ${indent(jobs.map(compileJob(_, sbt)).mkString("\n\n"), 1)}
640640
UseRef.Public(
641641
"actions",
642642
"upload-artifact",
643-
"v4"),
643+
"ea165f8d65b6e75b540449e92b4886f43607fa02",
644+
"v4.6.2"),
644645
name = Some(s"Upload target directories"),
645646
params = Map(
646647
"name" -> s"target-$${{ matrix.os }}-$${{ matrix.scala }}-$${{ matrix.java }}",
@@ -661,7 +662,8 @@ ${indent(jobs.map(compileJob(_, sbt)).mkString("\n\n"), 1)}
661662
UseRef.Public(
662663
"actions",
663664
"download-artifact",
664-
"v5"),
665+
"634f93cb2916e3fdff6788551b99b062d0335ce0",
666+
"v5.0.0"),
665667
name = Some(s"Download target directories ($v)"),
666668
params = Map(
667669
"name" -> s"target-$${{ matrix.os }}-$v-$${{ matrix.java }}"))
@@ -686,7 +688,11 @@ ${indent(jobs.map(compileJob(_, sbt)).mkString("\n\n"), 1)}
686688
val optionalPagefileFix = githubWorkflowWindowsPagefileFix.value.map(pageFileFix =>
687689
WorkflowStep.Use(
688690
name = Some("Configure pagefile for Windows"),
689-
ref = UseRef.Public("al-cheb", "configure-pagefile-action", "v1.4"),
691+
ref = UseRef.Public(
692+
"al-cheb",
693+
"configure-pagefile-action",
694+
"a3b6ebd6b634da88790d9c58d4b37a7f4a7b8708",
695+
"v1.4"),
690696
params = Map(
691697
"minimum-size" -> s"${pageFileFix.minSize}",
692698
"maximum-size" -> s"${pageFileFix.maxSize}"

src/main/scala/sbtghactions/UseRef.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ package sbtghactions
1919
sealed trait UseRef extends Product with Serializable
2020

2121
object UseRef {
22-
final case class Public(owner: String, repo: String, ref: String) extends UseRef
22+
final case class Public(owner: String, repo: String, rev: String, ref: String) extends UseRef
2323
final case class Local(path: String) extends UseRef
2424
final case class Docker(image: String, tag: String, host: Option[String] = None) extends UseRef
2525
}

src/main/scala/sbtghactions/WorkflowStep.scala

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,31 @@ object WorkflowStep {
3333
val DefaultSbtStepPreamble: List[String] = List(s"++ $${{ matrix.scala }}")
3434

3535
val CheckoutFull: WorkflowStep = Use(
36-
UseRef.Public("actions", "checkout", "v5"),
36+
UseRef.Public(
37+
"actions",
38+
"checkout",
39+
"08c6903cd8c0fde910a37f88322edcfb5dd907a8",
40+
"v5.0.0"),
3741
name = Some("Checkout current branch (full)"),
3842
params = Map("fetch-depth" -> "0"))
3943

40-
val Checkout: WorkflowStep = Use(UseRef.Public("actions", "checkout", "v5"), name = Some("Checkout current branch (fast)"))
44+
val Checkout: WorkflowStep = Use(
45+
UseRef.Public(
46+
"actions",
47+
"checkout",
48+
"08c6903cd8c0fde910a37f88322edcfb5dd907a8",
49+
"v5.0.0"),
50+
name = Some("Checkout current branch (fast)"))
4151

4252
def SetupJava(versions: List[JavaSpec]): List[WorkflowStep] =
4353
versions map {
4454
case jv @ JavaSpec(JavaSpec.Distribution.GraalVM(Graalvm.Version(graalVersion)), version) =>
4555
WorkflowStep.Use(
46-
UseRef.Public("graalvm", "setup-graalvm", "v1"),
56+
UseRef.Public(
57+
"graalvm",
58+
"setup-graalvm",
59+
"2a2412009026a83f51d179f92dc2b3fd4c8142df",
60+
"v1.4.1"),
4761
name = Some(s"Setup GraalVM (${jv.render})"),
4862
cond = Some(s"matrix.java == '${jv.render}'"),
4963
params = ListMap(
@@ -54,7 +68,11 @@ object WorkflowStep {
5468
"cache" -> "sbt"))
5569
case jv @ JavaSpec(JavaSpec.Distribution.GraalVM(Graalvm.Distribution(distribution)), version) =>
5670
WorkflowStep.Use(
57-
UseRef.Public("graalvm", "setup-graalvm", "v1"),
71+
UseRef.Public(
72+
"graalvm",
73+
"setup-graalvm",
74+
"2a2412009026a83f51d179f92dc2b3fd4c8142df",
75+
"v1.4.1"),
5876
name = Some(s"Setup GraalVM (${jv.render})"),
5977
cond = Some(s"matrix.java == '${jv.render}'"),
6078
params = ListMap(
@@ -65,7 +83,11 @@ object WorkflowStep {
6583
"cache" -> "sbt"))
6684
case jv @ JavaSpec(dist, version) =>
6785
WorkflowStep.Use(
68-
UseRef.Public("actions", "setup-java", "v5"),
86+
UseRef.Public(
87+
"actions",
88+
"setup-java",
89+
"dded0888837ed1f317902acf8a20df0ad188d165",
90+
"v5.0.0"),
6991
name = Some(s"Setup Java (${jv.render})"),
7092
cond = Some(s"matrix.java == '${jv.render}'"),
7193
params = ListMap(
@@ -76,15 +98,24 @@ object WorkflowStep {
7698

7799
def SetupSbt(runnerVersion: Option[String] = None): WorkflowStep =
78100
Use(
79-
ref = UseRef.Public("sbt", "setup-sbt", "v1"),
101+
ref = UseRef.Public(
102+
"sbt",
103+
"setup-sbt",
104+
"3e125ece5c3e5248e18da9ed8d2cce3d335ec8dd",
105+
"v1.1.14"),
80106
params = runnerVersion match {
81107
case Some(v) => Map("sbt-runner-version" -> v)
82108
case None => Map()
83109
},
84110
name = Some("Setup sbt"),
85111
)
86112

87-
val Tmate: WorkflowStep = Use(UseRef.Public("mxschmitt", "action-tmate", "v2"), name = Some("Setup tmate session"))
113+
val Tmate: WorkflowStep = Use(
114+
UseRef.Public(
115+
"mxschmitt",
116+
"action-tmate",
117+
"ece3d66d6d54a01594acd0ee2e79d1bfb2df136d",
118+
"v2"), name = Some("Setup tmate session"))
88119

89120
def ComputeVar(name: String, cmd: String): WorkflowStep =
90121
Run(

src/sbt-test/sbtghactions/check-and-regenerate/expected-ci.yml

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,21 +37,21 @@ jobs:
3737

3838
steps:
3939
- name: Checkout current branch (full)
40-
uses: actions/checkout@v5
40+
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
4141
with:
4242
fetch-depth: 0
4343

4444
- name: Setup Java (zulu@8)
4545
if: matrix.java == 'zulu@8'
46-
uses: actions/setup-java@v5
46+
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
4747
with:
4848
distribution: zulu
4949
java-version: 8
5050
cache: sbt
5151

5252
- name: Setup GraalVM (graal_22.3.0@17)
5353
if: matrix.java == 'graal_22.3.0@17'
54-
uses: graalvm/setup-graalvm@v1
54+
uses: graalvm/setup-graalvm@2a2412009026a83f51d179f92dc2b3fd4c8142df # v1.4.1
5555
with:
5656
version: 22.3.0
5757
java-version: 17
@@ -60,7 +60,7 @@ jobs:
6060
cache: sbt
6161

6262
- name: Setup sbt
63-
uses: sbt/setup-sbt@v1
63+
uses: sbt/setup-sbt@3e125ece5c3e5248e18da9ed8d2cce3d335ec8dd # v1.1.14
6464

6565
- name: Check that workflows are up to date
6666
run: sbt '++ ${{ matrix.scala }}' githubWorkflowCheck
@@ -74,7 +74,7 @@ jobs:
7474
run: tar cf targets.tar target project/target
7575

7676
- name: Upload target directories
77-
uses: actions/upload-artifact@v4
77+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
7878
with:
7979
name: target-${{ matrix.os }}-${{ matrix.scala }}-${{ matrix.java }}
8080
path: targets.tar
@@ -93,21 +93,21 @@ jobs:
9393

9494
steps:
9595
- name: Checkout current branch (full)
96-
uses: actions/checkout@v5
96+
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
9797
with:
9898
fetch-depth: 0
9999

100100
- name: Setup Java (zulu@8)
101101
if: matrix.java == 'zulu@8'
102-
uses: actions/setup-java@v5
102+
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
103103
with:
104104
distribution: zulu
105105
java-version: 8
106106
cache: sbt
107107

108108
- name: Setup GraalVM (graal_22.3.0@17)
109109
if: matrix.java == 'graal_22.3.0@17'
110-
uses: graalvm/setup-graalvm@v1
110+
uses: graalvm/setup-graalvm@2a2412009026a83f51d179f92dc2b3fd4c8142df # v1.4.1
111111
with:
112112
version: 22.3.0
113113
java-version: 17
@@ -116,10 +116,10 @@ jobs:
116116
cache: sbt
117117

118118
- name: Setup sbt
119-
uses: sbt/setup-sbt@v1
119+
uses: sbt/setup-sbt@3e125ece5c3e5248e18da9ed8d2cce3d335ec8dd # v1.1.14
120120

121121
- name: Download target directories (2.13.10)
122-
uses: actions/download-artifact@v5
122+
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
123123
with:
124124
name: target-${{ matrix.os }}-2.13.10-${{ matrix.java }}
125125

@@ -129,7 +129,7 @@ jobs:
129129
rm targets.tar
130130
131131
- name: Download target directories (2.12.17)
132-
uses: actions/download-artifact@v5
132+
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
133133
with:
134134
name: target-${{ matrix.os }}-2.12.17-${{ matrix.java }}
135135

0 commit comments

Comments
 (0)