Skip to content

Commit

Permalink
Merge pull request #1566 from guardian/ag/improved-build-process
Browse files Browse the repository at this point in the history
Improved build process
  • Loading branch information
fredex42 authored Apr 29, 2024
2 parents bef6071 + 34587a3 commit c4882d9
Show file tree
Hide file tree
Showing 6 changed files with 259 additions and 105 deletions.
30 changes: 0 additions & 30 deletions .github/workflows/ci.yml

This file was deleted.

253 changes: 253 additions & 0 deletions .github/workflows/improvedci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,253 @@
name: Facia-Tool CI
on:
workflow_dispatch:
pull_request:
branches:
- main

jobs:
generate_build_number:
name: Generate build number
runs-on: ubuntu-latest
outputs:
BUILD_NUMBER: ${{ steps.create-build-number.outputs.BUILD_NUMBER }}
steps:
- id: create-build-number
name: Create build number
run: |
LAST_TEAMCITY_BUILD=7962
echo "BUILD_NUMBER=$(( $GITHUB_RUN_NUMBER + $LAST_TEAMCITY_BUILD ))" >> "$GITHUB_OUTPUT"
build_client_v1:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: .nvmrc
cache: npm
cache-dependency-path: package-lock.json
- name: Set up grunt
run: npm i -g grunt-cli
- name: Install NPM dependencies
run: npm install
- name: Set up JSPM
env:
JSPM_GITHUB_AUTH_SECRET: ${{ secrets.GITHUB_TOKEN }}
run: |
npm run jspm config registries.github.auth ${JSPM_GITHUB_AUTH_SECRET}
npm run jspm registry export github
- name: Install JSPM dependencies
run: npm run jspm install

- name: Build frontend v1
run: |
grunt --stack bundle
- uses: actions/upload-artifact@v4
with:
name: fronts-client-v1
path: public/fronts-client-v1
if-no-files-found: error
- uses: actions/upload-artifact@v4
with:
name: jspm-packages
path: public/src/jspm_packages
if-no-files-found: error
test_client_v1:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: .nvmrc
cache: npm
cache-dependency-path: package-lock.json
- name: Set up grunt
run: npm i -g grunt-cli
- name: Install NPM dependencies
run: npm install
- name: Set up JSPM
env:
JSPM_GITHUB_AUTH_SECRET: ${{ secrets.GITHUB_TOKEN }}
run: |
npm run jspm config registries.github.auth ${JSPM_GITHUB_AUTH_SECRET}
npm run jspm registry export github
- name: Install JSPM dependencies
run: npm run jspm install

- name: Test frontend v1
run: |
grunt --stack validate
grunt --stack test
build_client_v2:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: fronts-client/.nvmrc
cache: yarn
cache-dependency-path: fronts-client/yarn.lock
- run: yarn install --frozen-lockfile
working-directory: fronts-client
- run: yarn build
working-directory: fronts-client
- uses: actions/upload-artifact@v4
with:
name: fronts-client-v2
path: public/fronts-client-v2
if-no-files-found: error
test_client_v2:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: fronts-client/.nvmrc
cache: yarn
cache-dependency-path: fronts-client/yarn.lock
- run: yarn install --frozen-lockfile
working-directory: fronts-client
- run: yarn test
working-directory: fronts-client

integrationtest_client_v2:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
needs:
- build_client_v2
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: fronts-client/.nvmrc
cache: yarn
cache-dependency-path: fronts-client/yarn.lock
- uses: actions/download-artifact@v4 #integration test requires built frontend (of course!)
with:
path: public/fronts-client-v2
name: fronts-client-v2
- run: yarn install --frozen-lockfile
working-directory: fronts-client
- run: yarn test-integration-ci
working-directory: fronts-client

test_backend:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
services:
# See https://docs.github.com/en/actions/using-containerized-services/creating-postgresql-service-containers
postgres:
image: postgres:10.7-alpine
env:
POSTGRES_USER: faciatool
POSTGRES_PASSWORD: faciatool
POSTGRES_DB: faciatool
# Set health checks to wait until postgres has started
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 4724:5432
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
java-version: "11"
distribution: "corretto"
cache: "sbt"
- name: Run tests
run: sbt 'test; database-int:test'

build_backend:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
needs:
- build_client_v1
- build_client_v2
- generate_build_number
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
path: public/fronts-client-v1
name: fronts-client-v1
- uses: actions/download-artifact@v4
with:
path: public/fronts-client-v2
name: fronts-client-v2
- uses: actions/download-artifact@v4
with:
name: jspm-packages
path: public/src/jspm_packages
- name: Set GITHUB_RUN_NUMBER environment variable
run: |
echo "GITHUB_RUN_NUMBER=${{ needs.generate_build_number.outputs.BUILD_NUMBER }}" >> $GITHUB_ENV
- uses: actions/setup-java@v4
with:
java-version: "11"
distribution: "corretto"
cache: "sbt"
- name: Bundle
run: sbt debian:packageBin
- uses: actions/upload-artifact@v4
with:
name: build-package
path: target/facia-tool_1.0_all.deb
if-no-files-found: error
compression-level: '0' #no point, it's already compressed
upload:
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
pull-requests: write
needs:
- generate_build_number
- test_client_v1
- test_client_v2
- test_backend
- build_backend
- integrationtest_client_v2
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
path: target/facia-tool_1.0_all.deb
name: build-package
- name: Set GITHUB_RUN_NUMBER environment variable
run: |
echo "GITHUB_RUN_NUMBER=${{ needs.generate_build_number.outputs.BUILD_NUMBER }}" >> $GITHUB_ENV
- uses: guardian/actions-riff-raff@v4
with:
app: facia-tool
roleArn: ${{ secrets.GU_RIFF_RAFF_ROLE_ARN }}
buildNumber: ${{ env.GITHUB_RUN_NUMBER }}
githubToken: ${{ secrets.GITHUB_TOKEN }}
configPath: riff-raff.yaml
contentDirectories: |
facia-tool:
- target/facia-tool_1.0_all.deb
25 changes: 5 additions & 20 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -10,40 +10,26 @@ packageDescription := "Guardian front pages editor"

ThisBuild / scalaVersion := "2.13.5"

import com.gu.riffraff.artifact.BuildInfo
import sbt.Resolver

debianPackageDependencies := Seq("openjdk-8-jre-headless")
debianPackageDependencies := Seq("java11-runtime-headless")

def env(key: String): Option[String] = Option(System.getenv(key))

riffRaffPackageName := s"cms-fronts::${name.value}"
riffRaffManifestProjectName := riffRaffPackageName.value
riffRaffUploadArtifactBucket := Option("riffraff-artifact")
riffRaffUploadManifestBucket := Option("riffraff-builds")
riffRaffArtifactResources := {
Seq(
(Debian / packageBin).value -> s"${name.value}/${name.value}_1.0_all.deb",
baseDirectory.value / "riff-raff.yaml" -> "riff-raff.yaml"
)
}

ThisBuild / javacOptions := Seq("-g","-encoding", "utf8")

Universal / javaOptions ++= Seq(
"-Dpidfile.path=/dev/null",
"-J-XX:MaxRAMFraction=2",
"-J-XX:InitialRAMFraction=2",
"-J-XX:MaxMetaspaceSize=500m",
"-J-XX:+PrintGCDetails",
"-J-XX:+PrintGCDateStamps",
s"-J-Xloggc:/var/log/${packageName.value}/gc.log",
"-Dcom.amazonaws.sdk.disableCbor"
)

routesGenerator := InjectedRoutesGenerator

scalacOptions := Seq("-unchecked", "-deprecation", "-target:jvm-1.8", "-Xcheckinit", "-encoding", "utf8", "-feature")
scalacOptions := Seq("-unchecked", "-deprecation", "-target:jvm-11", "-Xcheckinit", "-encoding", "utf8", "-feature")

Compile / doc / sources := Seq.empty

Expand Down Expand Up @@ -128,19 +114,18 @@ libraryDependencies ++= Seq(
val UsesDatabaseTest = config("database-int") extend Test

lazy val root = (project in file("."))
.enablePlugins(PlayScala, RiffRaffArtifact, JDebPackaging, SystemdPlugin, BuildInfoPlugin)
.enablePlugins(PlayScala, JDebPackaging, SystemdPlugin, BuildInfoPlugin)
.configs(UsesDatabaseTest)
.settings(
buildInfoPackage := "facia",
buildInfoKeys := {
lazy val buildInfo = BuildInfo(baseDirectory.value)
Seq[BuildInfoKey](
BuildInfoKey.constant("buildNumber", buildInfo.buildIdentifier),
BuildInfoKey.constant("buildNumber", env("GITHUB_BUILD_NUMBER").getOrElse("unknown")),
// so this next one is constant to avoid it always recompiling on dev machines.
// we only really care about build time on teamcity, when a constant based on when
// it was loaded is just fine
BuildInfoKey.constant("buildTime", System.currentTimeMillis),
BuildInfoKey.constant("gitCommitId", buildInfo.revision)
BuildInfoKey.constant("gitCommitId", env("GITHUB_SHA").getOrElse("unknown"))
)
}
)
Expand Down
2 changes: 0 additions & 2 deletions project/plugins.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,4 @@ addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.8.11")

addSbtPlugin("com.typesafe.sbt" % "sbt-git" % "0.9.3")

addSbtPlugin("com.gu" % "sbt-riffraff-artifact" % "1.1.18")

addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.9.0")
2 changes: 1 addition & 1 deletion riff-raff.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ deployments:
app: facia-tool
parameters:
amiTags:
Recipe: editorial-tools-focal-java8-ARM-WITH-cdk-base
Recipe: editorial-tools-focal-java11-ARM-WITH-cdk-base
AmigoStage: PROD
BuiltBy: amigo
amiEncrypted: true
Expand Down
Loading

0 comments on commit c4882d9

Please sign in to comment.