diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 9df3648f19..bb54f82ea8 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -94,3 +94,35 @@ jobs: kubectl cluster-info - name: Test k8s-bootstrap run: /bin/bash hooks/k8s-bootstrap/k8s-bootstrap-ondemand.sh test hooks/hook.env.example + + rpm-packaging-tests: + strategy: + matrix: + dist: ["el7", "el8"] + runs-on: "ubuntu-latest" + name: RPM packaging tests ${{ matrix.dist }} + + steps: + - name: Checkout ${{ github.sha }} + uses: actions/checkout@v2 + + - name: Ensure tags exist for packaging + run: git fetch --prune --unshallow --tags + + - name: Set version + id: version + run: | + version=$(git describe --tags --abbrev=0) + echo ::set-output name=version::${version#v} + + - name: Setup Ruby using Bundler + uses: ruby/setup-ruby@v1 + with: + ruby-version: "2.7.1" + bundler: "2.1.4" + bundler-cache: true + + - name: Build package + run: bundle exec rake package:rpm[${{ matrix.dist }}] + env: + VERSION: "${{ steps.version.outputs.version }}" diff --git a/.gitignore b/.gitignore index a0518265d1..bc4bd67750 100644 --- a/.gitignore +++ b/.gitignore @@ -103,3 +103,6 @@ tags # Ignore files downloaded for testing /tests/*.zip + +# Ignore temporary files +/tmp diff --git a/lib/tasks/packaging.rb b/lib/tasks/packaging.rb index d7c0dc66e5..f0eee962af 100644 --- a/lib/tasks/packaging.rb +++ b/lib/tasks/packaging.rb @@ -36,6 +36,21 @@ def tag_latest_container_cmd(image_name) "#{container_runtime} tag #{image_name}:#{image_tag} #{image_name}:latest" end + def git_clone_packaging(branch, dir) + args = ["clone", "--single-branch"] + args.concat ["--branch", branch] + args.concat ["https://github.com/OSC/ondemand-packaging.git", dir] + + "git #{args.join(' ')}" + end + + def rpm_build_cmd(packaging_dir, work_dir, output_dir, dist, version, extra_args) + args = ["-w", work_dir, "-o", output_dir] + args.concat ["-d", dist, "-V", "v#{version}"] + + "#{File.join(packaging_dir, 'build.sh')} #{args.join(' ')} #{extra_args} #{File.join(Dir.pwd, 'packaging')}" + end + desc "Tar and zip OnDemand into packaging dir with version name v#" task :tar do `which gtar 1>/dev/null 2>&1` @@ -82,4 +97,18 @@ def tag_latest_container_cmd(image_name) sh build_cmd("Dockerfile.dev", dev_image_name, extra_args: extra) unless image_exists?("#{dev_image_name}:#{image_tag}") sh tag_latest_container_cmd(dev_image_name) end -end \ No newline at end of file + + desc "Build RPM" + task :rpm, [:dist, :extra_args] => :tar do |t, args| + version = ENV['VERSION'] + version_major, version_minor, version_patch = version.split('.', 3) + dist = args[:dist] + extra_args = args[:extra_args].nil? ? '' : args[:extra_args] + tmp_dir = File.join(Dir.pwd, 'tmp') + packaging_dir = File.join(tmp_dir, "ondemand-packaging") + + Dir.mkdir(tmp_dir) unless Dir.exist?(tmp_dir) + sh git_clone_packaging("#{version_major}.#{version_minor}", packaging_dir) unless Dir.exist?(packaging_dir) + sh rpm_build_cmd(packaging_dir, File.join(tmp_dir, "work"), File.join(tmp_dir, "output"), dist, version, extra_args) + end +end