Skip to content
Snippets Groups Projects
Verified Commit 12db226c authored by Mateusz Tyszczak's avatar Mateusz Tyszczak :scroll:
Browse files

Add Wax spec swagger generation steps

parent 99a21fa6
No related branches found
No related tags found
1 merge request!61Add Wax spec swagger generation steps
Pipeline #102715 passed
......@@ -8,15 +8,15 @@ REGISTRY_URL="${2:?Missing arg #2 pointing an NPM registry URL}"
SCOPE="${3:?Missing arg #3 pointing a package scope}"
PROJECT_NAME="${4:?Missing arg #4 pointing a project name}"
OUTPUT_DIR="${5:?Missing arg #5 pointing an output directory}"
DIST_TAG="${6:-dev}"
COMMIT_REF_PROTECTED="${6:-}"
COMMIT_TAG="${7:-}"
pushd "${SOURCE_DIR}" # move to the project directory (where package.json file is located)
"${SCRIPTPATH}/npm_generate_version.sh" "${SOURCE_DIR}" "${REGISTRY_URL}" "${SCOPE}" "${PROJECT_NAME}" "${DIST_TAG}"
"${SCRIPTPATH}/npm_generate_version.sh" "${SOURCE_DIR}" "${REGISTRY_URL}" "${SCOPE}" "${PROJECT_NAME}" "${COMMIT_REF_PROTECTED}" "${COMMIT_TAG}"
npm run build
npm pack --pack-destination "${OUTPUT_DIR}" --json > "${OUTPUT_DIR}/built_package_info.json"
BUILT_PACKAGE_NAME=$(jq -r .[].filename "${OUTPUT_DIR}/built_package_info.json")
echo BUILT_PACKAGE_PATH="${OUTPUT_DIR}/${BUILT_PACKAGE_NAME}" > built_package_info.env
"${SCRIPTPATH}/npm_pack_package.sh" "${SOURCE_DIR}" "${REGISTRY_URL}" "${SCOPE}" "${PROJECT_NAME}" "${OUTPUT_DIR}" "${COMMIT_REF_PROTECTED}" "${COMMIT_TAG}"
popd
......@@ -12,7 +12,19 @@ SCOPE="${3:?Missing arg #3 pointing a package scope}"
PROJECT_NAME="${4:?Missing arg #4 pointing a project name}"
DIST_TAG=${5:-"dev"}
COMMIT_REF_PROTECTED="${5:-}"
COMMIT_TAG="${6:-}"
if [ "${CI_COMMIT_REF_PROTECTED}" == "true" ]; then
if [ -n "${CI_COMMIT_TAG}" ]; then
DIST_TAG="latest" # if package is built for protected tag, let's mark it as latest
else
DIST_TAG="stable" # otherwise, any build for protected branch will produce stable package
fi
else
DIST_TAG="dev"
fi
git config --global --add safe.directory '*'
......@@ -33,7 +45,7 @@ TAG="${_TAG/\-${PROJECT_NAME}\-/}"
echo "Corrected tag (skipped subproject -${PROJECT_NAME}- suffix): ${TAG}"
echo "Preparing npm package for ${PROJECT_NAME}@${TAG} (#${SHORT_HASH})"
echo "Preparing npm package for ${SCOPE}/${PROJECT_NAME}@${TAG} (#${SHORT_HASH})"
if [ "${TAG}" = "" ]; then
echo "Could not find a valid tag name for branch"
......@@ -51,7 +63,9 @@ else
NEW_VERSION="${TAG}-${TAG_TIME}"
fi
git checkout "${PROJECT_DIR}/package.json" # be sure we're on clean version
if ! git check-ignore "${PROJECT_DIR}/package.json"; then
git checkout "${PROJECT_DIR}/package.json" # be sure we're on clean version, but only if not under .gitignore
fi
jq ".name = \"${SCOPE}/${PROJECT_NAME}\" | .version = \"$NEW_VERSION\" | .publishConfig.registry = \"https://${REGISTRY_URL}\" | .publishConfig.tag = \"${DIST_TAG}\"" "${PROJECT_DIR}/package.json" > "${PROJECT_DIR}/package.json.tmp"
......
#!/usr/bin/env bash
set -e
SCRIPTPATH="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
SOURCE_DIR="${1:?Missing arg #1 specifying a project source directory}"
REGISTRY_URL="${2:?Missing arg #2 pointing an NPM registry URL}"
SCOPE="${3:?Missing arg #3 pointing a package scope}"
PROJECT_NAME="${4:?Missing arg #4 pointing a project name}"
OUTPUT_DIR="${5:?Missing arg #5 pointing an output directory}"
COMMIT_REF_PROTECTED="${6:-}"
COMMIT_TAG="${7:-}"
pushd "${SOURCE_DIR}" # move to the project directory (where package.json file is located)
"${SCRIPTPATH}/npm_generate_version.sh" "${SOURCE_DIR}" "${REGISTRY_URL}" "${SCOPE}" "${PROJECT_NAME}" "${COMMIT_REF_PROTECTED}" "${COMMIT_TAG}"
npm pack --pack-destination "${OUTPUT_DIR}" --json > "${OUTPUT_DIR}/built_package_info.json"
BUILT_PACKAGE_NAME=$(jq -r .[].filename "${OUTPUT_DIR}/built_package_info.json")
{
echo PACKAGE_SOURCE_DIR="${SOURCE_DIR}"
echo BUILT_PACKAGE_PATH="${OUTPUT_DIR}/${BUILT_PACKAGE_NAME}"
} > "${SOURCE_DIR}/built_package_info.env"
echo "built_package_info.env file contents:"
cat "${SOURCE_DIR}/built_package_info.env"
popd
......@@ -3,10 +3,10 @@ include:
variables:
# uses registry.gitlab.syncad.com/hive/common-ci-configuration/emsdk:3.1.62-1
EMSCRIPTEN_IMAGE_TAG: "3.1.62-1@sha256:98b3062135cc4e31b9efc8343e2b8c0c66b25efad18c5b7255237797ebdad286"
EMSCRIPTEN_IMAGE_TAG: "3.1.62-1@sha256:1bc4876054017a7199b821f251f7e7a5d694616310410b13816e7ecff2d648d4"
EMSCRIPTEN_IMAGE: "registry.gitlab.syncad.com/hive/common-ci-configuration/emsdk:$EMSCRIPTEN_IMAGE_TAG"
.npm_based_job_base:
.node_based_job_base:
extends: .job-defaults
variables:
......@@ -22,8 +22,79 @@ variables:
- . "${NVM_DIR}/nvm.sh" # This loads nvm environment
- nvm use "${NODEJS_VERSION}" # Force usage of preconfigured NodeJS version
- cd "${SOURCE_DIR}" # move to the project directory (where package.json file is located)
.npm_based_job_base:
extends: .node_based_job_base
before_script:
- !reference [.node_based_job_base, before_script]
- pnpm install --frozen-lockfile # install all required dependencies
.filter_out_swagger_json:
extends: .node_based_job_base
variables:
# The directory containing sources to be built - it can be overrided by derived job
SOURCE_DIR: "${CI_PROJECT_DIR}"
DIST_DIR: "${SOURCE_DIR}/build"
INPUT_SQL_SWAGGER_FILE: "${SOURCE_DIR}/endpoints/endpoint_schema.sql"
JSON_SWAGGER_FILE: "${DIST_DIR}/swagger-doc.json"
script:
- mkdir -vp "${DIST_DIR}"
- cat "${INPUT_SQL_SWAGGER_FILE}" | sed -n '/^ openapi json = \$\$/,/^\$\$/ { /^ openapi json = \$\$/d; /^\$\$/d; p }' > "${JSON_SWAGGER_FILE}"
- echo BUILT_JSON_SWAGGER_FILE="${JSON_SWAGGER_FILE}" > "${SOURCE_DIR}/built_swagger_json.env"
artifacts:
reports:
dotenv:
- "${SOURCE_DIR}/built_swagger_json.env" # contains path to produced tgz
paths:
- "${JSON_SWAGGER_FILE}"
when: always
expire_in: 1 week
.generate_swagger_package:
extends: .node_based_job_base
variables:
# The directory containing sources to be built - it can be overrided by derived job
SOURCE_DIR: "${CI_PROJECT_DIR}"
DIST_DIR: "${SOURCE_DIR}/build"
INPUT_JSON_SWAGGER_FILE: "${DIST_DIR}/swagger-doc.json"
OUT_DIR: "${DIST_DIR}/generated"
WAX_SPEC_GENERATOR_VERSION: "1.1.0-240903102246"
NPM_ALREADY_BUILT: 1
# Those variables should be overwriten by the derived job
NAMESPACE: ""
# Target package meta information - they should be overrided by derived job
NPM_PACKAGE_SCOPE: ""
NPM_PACKAGE_NAME: ""
NPM_REGISTRY_URL: "gitlab.syncad.com/api/v4/projects/${CI_PROJECT_ID}/packages/npm/"
before_script:
- mkdir -vp "${DIST_DIR}"
- pushd "${DIST_DIR}"
- echo @hiveio:registry=https://gitlab.syncad.com/api/v4/groups/136/-/packages/npm/ >> .npmrc
# Ignore package version as it will be replaced in the next step - npm generate version script
- npx --yes @hiveio/wax-spec-generator@${WAX_SPEC_GENERATOR_VERSION} generate-wax-spec -i "${INPUT_JSON_SWAGGER_FILE}" -o "${OUT_DIR}" -N "${NAMESPACE}" -e --npm-name "${NPM_PACKAGE_SCOPE}/${NPM_PACKAGE_NAME}" --npm-version "0.0.0"
- popd
script:
- /home/emscripten/scripts/npm_pack_package.sh "${OUT_DIR}" "${NPM_REGISTRY_URL}" "${NPM_PACKAGE_SCOPE}" "${NPM_PACKAGE_NAME}" "${DIST_DIR}" "${CI_COMMIT_REF_PROTECTED}" "${CI_COMMIT_TAG}"
artifacts:
reports:
dotenv:
- "${OUT_DIR}/built_package_info.env" # contains path to produced tgz
- "${OUT_DIR}/built_package_version_info.env" # contains information related to generated package version and git revision
paths:
- "${OUT_DIR}" # Built source used for package.json manipulation
- "${DIST_DIR}/*.tgz" # Built package for publishing
- "${DIST_DIR}/built_package_info.json"
when: always
expire_in: 1 week
# Base definition for job performing an npm build step. Outputs packaged project in *.tgz form
# tgz package path can be received by `BUILT_PACKAGE_PATH` .env variable
.npm_build_template:
......@@ -41,17 +112,7 @@ variables:
NPM_REGISTRY_URL: "gitlab.syncad.com/api/v4/projects/${CI_PROJECT_ID}/packages/npm/"
script:
- |
if [ "${CI_COMMIT_REF_PROTECTED}" == "true" ]; then
if [ -n "${CI_COMMIT_TAG}" ]; then
DIST_TAG="latest" # if package is built for protected tag, let's mark it as latest
else
DIST_TAG="stable" # otherwise, any build for protected branch will produce stable package
fi
else
DIST_TAG="dev"
fi
/home/emscripten/scripts/npm_build_package.sh "${SOURCE_DIR}" "${NPM_REGISTRY_URL}" "${NPM_PACKAGE_SCOPE}" "${NPM_PACKAGE_NAME}" "${DIST_DIR}" "${DIST_TAG}"
- /home/emscripten/scripts/npm_build_package.sh "${SOURCE_DIR}" "${NPM_REGISTRY_URL}" "${NPM_PACKAGE_SCOPE}" "${NPM_PACKAGE_NAME}" "${DIST_DIR}" "${CI_COMMIT_REF_PROTECTED}" "${CI_COMMIT_TAG}"
artifacts:
reports:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment