GitHub Action : How to replace in string in file

GitHub Action : How to replace in string in file

Problem Description:

Introduction

I’m currently working on a GitHub Action and I want to check if this work for many version of Java.

For this I want to update for each test the pom.xml file and change the java inside this.

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>io.github.pseudo</groupId>
    <artifactId>template</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>


    <name>template</name>
    <url>http://www.example.com</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>JAVAVERSION</java.version>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
    </properties>
</project>

Question

Does someone know how we can replace string in file for each test ?

Solution – 1

You can use the Find and Replace GH Action to find and replace the version in your pom.xml:

name: GitHub Action

on:
  push:
    branches: [ main ]

jobs:
  build:
    strategy:
      matrix:
        java: [ '8', '11', '17' ]
        os: [ubuntu-latest, macos-latest, windows-latest]

    runs-on: ${{ matrix.os }}

    name: Java ${{ matrix.Java }} sample
    steps:
      - uses: actions/[email protected]

      - name: Setup java
        uses: actions/[email protected]
        with:
          distribution: 'temurin'
          java-version: ${{ matrix.java }}

      - name: Find and Replace
        uses: jacobtomlinson/[email protected]
        with:
          find: "JAVAVERSION"
          replace: ${{ matrix.java }}
          regex: false
          include: 'pom.xml'

      # the rest of needed steps

This WF will run a matrix with different versions of Java and replace the JAVAVERSION in the pom.xml file with the specific version.

For this example, I also used the Setup Java GH Action.

Solution – 2

I found this GitHub Action: MathieuSoysal/replace-string-in-file

Maybe it corresponds to your issue, it works on Macos-latest, Ubunut-latest and Windows-latest.

Example of usage for your issue

name: Test your GitHub Actions

on: [push]

jobs:

  test:
    continue-on-error: true
    strategy:
      matrix:
        java: [8, 11, 16, 17, 18, 19]
        os: [ubuntu-latest, windows-latest, macos-latest]
    runs-on: ${{ matrix.os }}

    name: Test Java version: ${{ matrix.java }} - os: ${{ matrix.os }}
    steps:
      - uses: actions/[email protected]

      - name: Replace string in file
        uses: MathieuSoysal/[email protected]
        with:
          file: pom.xml
          old-string: JAVAVERSION
          new-string: ${{ matrix.java }}
Rate this post
We use cookies in order to give you the best possible experience on our website. By continuing to use this site, you agree to our use of cookies.
Accept
Reject