CI GitHub Action Workflow
Introduction
For this week lab we were tasked with set up of CI Workflow in our own GitHub project that we created earlier this semester. I've already set it up, but would like to describe this process later on this blog. Also we were supposed to write at least one unit test for our group mate's project, which in my case written in different language -- Rust.
GitHub Actions CI Workflow Set Up
For me it was a magic to see how my pull request is getting tested in other projects. This time it's my turn to deploy it in my own project. I opened Actions tab, and searched for Java CI with Maven. I pressed Configure and .yml file appeared.
Here's how it looked like:
Afterwards, I pushed my changes, opened pull-request and witnessed my own magic.
Here's result:
Linter, Code Formatter and Test
Sometime later I added to my project linter, code formatter and test, found a way how to integrate them to my workflow.
Result:
- It helped me a lot to make sure that every contributor follows same coding style.
- Now every pull request runs unit tests, linter and code formatter at the same time!
Writing Unit Tests in Rust
As always I picked project by Theo. His project written in Rust.
Differences
In Rust testing looks different. In Java you have to create a different folder called test and implement each test in separate file inside of earlier created folder. Unlike Java, you must implement all the tests inside of the file, where function that you want to test is implemented.
I had to implement function located inside of chat_completions.rs.
Result:
If you take a closer look, my test implementation is inside of chat_completions.rs.
Dev Container
Dev Container is a remote environment that allows all contributors to work in the same environment. It is cool feature that I didn't know about before.
To set it up in Intellij Idea I had to create a folder .devcontainer and create a config file devcontainer.json.
Conclusion
GitHub CI Action Workflow is amazing thing that was a magic for me before! I really enjoyed this lab. I learned new things, pretty much everything was new to me!
The above is the detailed content of CI GitHub Action Workflow. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Pre-formanceTartuptimeMoryusage, Quarkusandmicronautleadduetocompile-Timeprocessingandgraalvsupport, Withquarkusoftenperforminglightbetterine ServerLess scenarios.2.Thyvelopecosyste,

AdeadlockinJavaoccurswhentwoormorethreadsareblockedforever,eachwaitingforaresourceheldbytheother,typicallyduetocircularwaitcausedbyinconsistentlockordering;thiscanbepreventedbybreakingoneofthefournecessaryconditions—mutualexclusion,holdandwait,nopree

Using String.join() (Java8) is the easiest recommended method for connecting string arrays, just specify the separator directly; 2. For old versions of Java or when more control is needed, you can use StringBuilder to manually traverse and splice; 3. StringJoiner is suitable for scenarios that require more flexible formats such as prefixes and suffixes; 4. Using Arrays.stream() combined with Collectors.joining() is suitable for filtering or converting the array before joining; To sum up, if Java8 and above is used, the String.join() method should be preferred in most cases, which is concise and easy to read, but for complex logic, it is recommended.

Importjava.ioandjava.net.SocketforI/Oandsocketcommunication.2.CreateaSocketobjecttoconnecttotheserverusinghostnameandport.3.UsePrintWritertosenddataviaoutputstreamandBufferedReadertoreadserverresponsesfrominputstream.4.Usetry-with-resourcestoautomati

Use the .equals() method to compare string content, because == only compare object references rather than content; 1. Use .equals() to compare string values equally; 2. Use .equalsIgnoreCase() to compare case ignoring; 3. Use .compareTo() to compare strings in dictionary order, returning 0, negative or positive numbers; 4. Use .compareToIgnoreCase() to compare case ignoring; 5. Use Objects.equals() or safe call method to process null strings to avoid null pointer exceptions. In short, you should avoid using == for string content comparisons unless it is explicitly necessary to check whether the object is in phase.

Create a WebSocket server endpoint to define the path using @ServerEndpoint, and handle connections, message reception, closing and errors through @OnOpen, @OnMessage, @OnClose and @OnError; 2. Ensure that javax.websocket-api dependencies are introduced during deployment and automatically registered by the container; 3. The Java client obtains WebSocketContainer through the ContainerProvider, calls connectToServer to connect to the server, and receives messages using @ClientEndpoint annotation class; 4. Use the Session getBasicRe

This article discusses the mechanism and common misunderstandings of Spring Boot applications for handling non-UTF-8 request encoding. The core lies in understanding the importance of the charset parameter in the HTTP Content-Type header, as well as the default character set processing flow of Spring Boot. By analyzing the garbled code caused by wrong testing methods, the article guides readers how to correctly simulate and test requests for different encodings, and explains that Spring Boot usually does not require complex configurations to achieve compatibility under the premise that the client correctly declares encoding.

The Java design pattern is a reusable solution to common software design problems. 1. The Singleton mode ensures that there is only one instance of a class, which is suitable for database connection pooling or configuration management; 2. The Factory mode decouples object creation, and objects such as payment methods are generated through factory classes; 3. The Observer mode automatically notifies dependent objects, suitable for event-driven systems such as weather updates; 4. The dynamic switching algorithm of Strategy mode such as sorting strategies improves code flexibility. These patterns improve code maintainability and scalability but should avoid overuse.
