chore: Update the build process to refer the Appsmith version from the info.json in all build artifacts (#29903)
Fixes #29623 Co-authored-by: Shrikant Sharat Kandula <shrikant@appsmith.com>
This commit is contained in:
parent
7fcbb44d7d
commit
efc303e760
11
.github/workflows/client-build.yml
vendored
11
.github/workflows/client-build.yml
vendored
|
|
@ -41,7 +41,7 @@ jobs:
|
|||
github.event_name == 'push' ||
|
||||
github.event_name == 'workflow_dispatch' ||
|
||||
github.event_name == 'repository_dispatch' ||
|
||||
github.event_name == 'schedule'
|
||||
github.event_name == 'schedule'
|
||||
defaults:
|
||||
run:
|
||||
working-directory: app/client
|
||||
|
|
@ -242,13 +242,6 @@ jobs:
|
|||
if [[ "${{github.ref}}" == "refs/heads/release" ]]; then
|
||||
echo "REACT_APP_ENVIRONMENT=STAGING" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
# Since this is an unreleased build, we set the version to incremented version number with
|
||||
# a `-SNAPSHOT` suffix.
|
||||
latest_released_version="$(git ls-remote --tags --sort=-v:refname "$(git remote | head -1)" 'v*' | awk -F/ '{print $NF; exit}')"
|
||||
echo "latest_released_version = $latest_released_version"
|
||||
next_version="$(echo "$latest_released_version" | awk -F. -v OFS=. '{ $NF++; print }')"
|
||||
echo "next_version = $next_version"
|
||||
echo version=$next_version-SNAPSHOT >> $GITHUB_OUTPUT
|
||||
|
||||
# We burn React environment & the Segment analytics key into the build itself.
|
||||
# This is to ensure that we don't need to configure it in each installation
|
||||
|
|
@ -263,8 +256,6 @@ jobs:
|
|||
REACT_APP_ENVIRONMENT=${{steps.vars.outputs.REACT_APP_ENVIRONMENT}} \
|
||||
REACT_APP_FUSIONCHARTS_LICENSE_KEY=${{ secrets.APPSMITH_FUSIONCHARTS_LICENSE_KEY }} \
|
||||
SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }} \
|
||||
REACT_APP_VERSION_ID=${{ steps.vars.outputs.version }} \
|
||||
REACT_APP_VERSION_RELEASE_DATE=$(date -u '+%Y-%m-%dT%H:%M:%SZ') \
|
||||
REACT_APP_VERSION_EDITION="Community" \
|
||||
yarn build
|
||||
|
||||
|
|
|
|||
23
.github/workflows/server-build.yml
vendored
23
.github/workflows/server-build.yml
vendored
|
|
@ -145,23 +145,6 @@ jobs:
|
|||
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
|
||||
restore-keys: ${{ runner.os }}-m2
|
||||
|
||||
# Here, the GITHUB_REF is of type /refs/head/<branch_name>. We extract branch_name from this by removing the
|
||||
# first 11 characters. This can be used to build images for several branches
|
||||
# Since this is an unreleased build, we get the latest released version number, increment the minor number in it,
|
||||
# append a `-SNAPSHOT` at it's end to prepare the snapshot version number. This is used as the project's version.
|
||||
- name: Get the version to tag the Docker image
|
||||
if: steps.run_result.outputs.run_result != 'success' && (steps.changed-files-specific.outputs.any_changed == 'true' || github.event_name == 'push' || github.event_name == 'workflow_dispatch' || github.event_name == 'schedule')
|
||||
id: vars
|
||||
run: |
|
||||
# Since this is an unreleased build, we set the version to incremented version number with a
|
||||
# `-SNAPSHOT` suffix.
|
||||
latest_released_version="$(git ls-remote --tags --sort=-v:refname "$(git remote | head -1)" 'v*' | awk -F/ '{print $NF; exit}')"
|
||||
echo "latest_released_version = $latest_released_version"
|
||||
next_version="$(echo "$latest_released_version" | awk -F. -v OFS=. '{ $NF++; print }')"
|
||||
echo "next_version = $next_version"
|
||||
echo version=$next_version-SNAPSHOT >> $GITHUB_OUTPUT
|
||||
echo tag=$(echo ${GITHUB_REF:11}) >> $GITHUB_OUTPUT
|
||||
|
||||
# Build the code
|
||||
- name: Build
|
||||
if: steps.run_result.outputs.run_result != 'success' && (steps.changed-files-specific.outputs.any_changed == 'true' || github.event_name == 'push' || github.event_name == 'workflow_dispatch' || github.event_name == 'schedule')
|
||||
|
|
@ -176,10 +159,6 @@ jobs:
|
|||
APPSMITH_ENVFILE_PATH: /tmp/dummy.env
|
||||
APPSMITH_VERBOSE_LOGGING_ENABLED: false
|
||||
run: |
|
||||
mvn --batch-mode versions:set \
|
||||
-DnewVersion=${{ steps.vars.outputs.version }} \
|
||||
-DgenerateBackupPoms=false \
|
||||
-DprocessAllModules=true
|
||||
./build.sh -DskipTests
|
||||
|
||||
# Test the code
|
||||
|
|
@ -246,7 +225,7 @@ jobs:
|
|||
if [ "$reponame" = "appsmith" ]; then export repodir="CE"; fi
|
||||
if [ "$reponame" = "appsmith-ee" ]; then export repodir="EE"; fi
|
||||
cd cibuildcache/$repodir/release/server
|
||||
git lfs pull ./server.jar
|
||||
git lfs pull ./server.jar
|
||||
mv ./server.jar ../../../../../server.jar
|
||||
cd ../../../../../
|
||||
tar -xzvf ./server.jar
|
||||
|
|
|
|||
|
|
@ -1,9 +1,11 @@
|
|||
package com.appsmith.server;
|
||||
|
||||
import com.appsmith.server.configurations.ProjectProperties;
|
||||
import io.micrometer.observation.ObservationRegistry;
|
||||
import io.micrometer.observation.aop.ObservedAspect;
|
||||
import io.opentelemetry.api.OpenTelemetry;
|
||||
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.boot.Banner;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
|
|
@ -16,14 +18,28 @@ import static com.appsmith.server.constants.EnvVariables.APPSMITH_NEW_RELIC_ACCO
|
|||
|
||||
@SpringBootApplication
|
||||
@EnableScheduling
|
||||
@Slf4j
|
||||
public class ServerApplication {
|
||||
|
||||
private final ProjectProperties projectProperties;
|
||||
|
||||
public ServerApplication(ProjectProperties projectProperties) {
|
||||
this.projectProperties = projectProperties;
|
||||
printBuildInfo();
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
new SpringApplicationBuilder(ServerApplication.class)
|
||||
.bannerMode(Banner.Mode.OFF)
|
||||
.run(args);
|
||||
}
|
||||
|
||||
private void printBuildInfo() {
|
||||
String version = projectProperties.getVersion();
|
||||
String commitId = projectProperties.getCommitSha();
|
||||
log.info("Application started with build version {}, and commitSha {}", version, commitId);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public OpenTelemetry openTelemetry() {
|
||||
String instanceName =
|
||||
|
|
|
|||
|
|
@ -1,23 +1,40 @@
|
|||
package com.appsmith.server.configurations;
|
||||
|
||||
import com.appsmith.server.dtos.BuildInfo;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import lombok.Getter;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.PropertySource;
|
||||
|
||||
/**
|
||||
* Properties in this configuration object are loaded from the `pom.properties` file that is generated by Maven
|
||||
* automatically. This file is included in the final JAR file at
|
||||
* `META-INF/maven/{project.group}/{project.name}/pom.properties`. Outside the JAR file, it can be accessed from
|
||||
* `target/maven-archiver/pom.properties`.
|
||||
*/
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
|
||||
@Configuration
|
||||
@PropertySource(value = "classpath:META-INF/maven/com.appsmith/server/pom.properties", ignoreResourceNotFound = true)
|
||||
@Getter
|
||||
@Slf4j
|
||||
public class ProjectProperties {
|
||||
private static final String INFO_JSON_PATH = "/opt/appsmith/info.json";
|
||||
private static final ObjectMapper objectMapper = new ObjectMapper();
|
||||
|
||||
public static final String EDITION = "CE";
|
||||
private String version = "UNKNOWN";
|
||||
private String commitSha = "UNKNOWN";
|
||||
|
||||
@Value("${version:UNKNOWN}")
|
||||
private String version;
|
||||
public ProjectProperties() {
|
||||
try {
|
||||
Path infoJsonPath = Paths.get(INFO_JSON_PATH);
|
||||
if (Files.exists(infoJsonPath)) {
|
||||
String jsonContent = Files.readString(infoJsonPath);
|
||||
// Parse JSON content using the AppsmithInfo class
|
||||
BuildInfo buildInfo = objectMapper.readValue(jsonContent, BuildInfo.class);
|
||||
version = buildInfo.getVersion();
|
||||
commitSha = buildInfo.getCommitSha();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
// Ignore the exception and return "UNKNOWN" as the version
|
||||
log.debug("Error reading version from info.json {}", e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,16 @@
|
|||
package com.appsmith.server.dtos;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* This class is used to parse the JSON content of the info.json file. This file is generated during the build process
|
||||
* and contains the version of the Appsmith server.
|
||||
*/
|
||||
@Data
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
public class BuildInfo {
|
||||
private String version;
|
||||
|
||||
private String commitSha;
|
||||
}
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
package com.appsmith.server.controllers;
|
||||
|
||||
import com.appsmith.server.applications.base.ApplicationService;
|
||||
import com.appsmith.server.configurations.ProjectProperties;
|
||||
import com.appsmith.server.configurations.RedisTestContainerConfig;
|
||||
import com.appsmith.server.configurations.SecurityTestConfig;
|
||||
import com.appsmith.server.constants.Url;
|
||||
|
|
@ -87,6 +88,9 @@ public class ApplicationControllerTest {
|
|||
@MockBean
|
||||
PartialImportService partialImportService;
|
||||
|
||||
@MockBean
|
||||
ProjectProperties projectProperties;
|
||||
|
||||
private String getFileName(int length) {
|
||||
StringBuilder fileName = new StringBuilder();
|
||||
for (int count = 0; count < length; count++) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user